Borland c++ problem

poruka: 41
|
čitano: 12.567
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
offline
Borland c++ problem

Pozdrav!

Neznam dali nam profesor nije nešto objasnio, ali jučer smo radili while i kada napisem program kojeg je on na ploči napisao, [URL=http://slike.hr/slike/dsadas_197d7.jpg.html][IMG]http://slike.hr/slike-male/d/dsadas_197d7.jpg[/IMG][/URL]  kao što vidite izbaci mi Function should return a value.

Dali netko zna zašto mi to izbacuje i kako da uklonim tu grešku da mi program proradi.

Btw. napisao sam i drugi program sa while unutra, i opet isto izbacuje.

Koristim Borland C++ v3.1

Hvala!

Svrzic
Moj PC  
0 0 hvala 0
15 godina
odjavljen
offline
RE: Borland c++ problem
Svrzic kaže...

Pozdrav!

Neznam dali nam profesor nije nešto objasnio, ali jučer smo radili while i kada napisem program kojeg je on na ploči napisao, [URL=http://slike.hr/slike/dsadas_197d7.jpg.html][IMG]http://slike.hr/slike-male/d/dsadas_197d7.jpg[/IMG][/URL]  kao što vidite izbaci mi Function should return a value.

Dali netko zna zašto mi to izbacuje i kako da uklonim tu grešku da mi program proradi.

Btw. napisao sam i drugi program sa while unutra, i opet isto izbacuje.

Koristim Borland C++ v3.1

Hvala!

Sve ti se na slici vidi, returni 0;

15 godina
offline
RE: Borland c++ problem
Nismo radili taj return
Svrzic
15 godina
odjavljen
offline
RE: Borland c++ problem
Svrzic kaže...
Nismo radili taj return

Pred zadnju } zagradu stavi redak return 0:

17 godina
neaktivan
offline
Borland c++ problem

Kao prvo main() funkciju uvijek deklariraj kao int. Dakle,

 

int main()
{
   bla bla bla;
   return 0;
}

 

Nikad mi nije bilo jasno zašto ljude uče krivo u školama (kao evo ovaj tvoj primjer). Na nekim kompajlerima bi ovo i prošlo samo sa warningom (GCC recimo), a evo neki niti ne daju da se kompajlira uopće. Mogao bi staviti void main(), ali to opet nije dobro jer kad program završi, on mora dojaviti operacijskom sustavu da je gotov, a to dojavljuje preko return naredbe. Kad OS primi nulu od programa, zna da je program gotov i onda fino počisti za njim. Uči se pravilno, ovak kak sam ti gore napisal, int main() i return 0; na kraju main f-je.

Q: a kako se to linux ponasa kad crkne hdd? A: zastekava svakih 60 sec,ali prezivi se
Poruka je uređivana zadnji put uto 1.2.2011 15:31 (1domagoj1).
 
0 0 hvala 0
15 godina
offline
RE: Borland c++ problem
Vec sam imao problema sa takvim nekakvim int main ili neznam kaj, al mi moramo tak radit kak smo naucili -.-'
i da se zna borland je iz 91-92 godine
neznam zakaj to nepromjene.
Prijatelj se preselio kod mene u razred i oni su radili u visualu 2008 i oni su radili s tim int main, void...
Svrzic
17 godina
neaktivan
offline
Borland c++ problem

A onda učite krivo, kaj me briga. Samo čisto onak informacije radi, evo:

 

http://www2.research.att.com/~bs/bs_faq2.html

 

Pogotovo ovaj dio:

http://www2.research.att.com/~bs/bs_faq2.html#void-main

 

Točnije, citiram:

 

A conforming implementation may provide more versions of main(), but they must all have return type int. The int returned by main() is a way for a program to return a value to "the system" that invokes it. On systems that doesn't provide such a facility the return value is ignored, but that doesn't make "void main()" legal C++ or legal C. Even if your compiler accepts "void main()" avoid it, or risk being considered ignorant by C and C++ programmers.

 

Note also that neither ISO C++ nor C99 allows you to leave the type out of a declaration. That is, in contrast to C89 and ARM C++ ,"int" is not assumed where a type is missing in a declaration. Consequently:

 

          main() { /* ... */ }

 

is an error because the return type of main() is missing.

 

Danas živimo u 2011. godini, C99 Standard jasno kaže kak se main() f-ja deklarira (hint: to ti je ovo iznad poboldano, vezano za C99) i gotovo, možeš ti pisat drugačije, ali to je krivo i ne valja. Ako vi morate raditi "tak kak ste naučili" slobodno reci profesoru da je glup. 

 

EDIT: Ako te više zanima, imaš na ovom linku sve o Standardu, promjenama, prijedlozima, budućnosti...

http://www.open-std.org/jtc1/sc22/wg14/

Q: a kako se to linux ponasa kad crkne hdd? A: zastekava svakih 60 sec,ali prezivi se
Poruka je uređivana zadnji put uto 1.2.2011 20:49 (1domagoj1).
 
3 0 hvala 0
17 godina
moderator
online
RE: Borland c++ problem
1domagoj1 kaže...

Kad OS primi nulu od programa, zna da je program gotov i onda fino počisti za njim.

Malo si tu zeznuo stvari kod objašnjavanja. Zna se da je program gotov kad se izvede naredba return, nakon koje se izvršavanje daljnjih naredbi prepušta operacijskom sustavu - povratna vrijednost nema veze s tim. Njome se samo signalizira kako se program izvršio. Kad se vrati nula, to u pravilu znači da se program normalno izvršio i uspješno završio s radom (bez greške). Kad se vrati neki broj veći od nule ili je došlo do neke run-time greške zbog koje se program srušio ili si ti s return x vratio neku povratnu vrijednost kojom hoćeš nešto signalizirati.

 

Povratne vrijednosti možeš iskoristiti ako iz svog programa pokrećeš drugi program pa onda znaš kako se taj drugi program izvršio - uspješno ili neuspješno. Ili se mogu iskoristiti u .bat datotekama - to vuče korijene još iz starog DOS-a i njegove konstrukcije IF ERRORLEVEL...

 

Više informacija: http://en.wikipedia.org/wiki/Exit_status

17 godina
neaktivan
offline
Borland c++ problem

Hvala na ispravku i objašnjenju. :)

Q: a kako se to linux ponasa kad crkne hdd? A: zastekava svakih 60 sec,ali prezivi se
 
1 0 hvala 0
15 godina
protjeran
offline
RE: Borland c++ problem
1domagoj1 kaže...

Nikad mi nije bilo jasno zašto ljude uče krivo u školama

Isprike autoru teme što sam ugašena tema (offtopic).

Ali, znam jednog lika, u srednjoj su programirali u PASCALU, dobio zadatak, prvi ga riješio i točno naravno, ali je dobio jedinicu jer je koristio naredbu koju još nisu učili, to je uredu???

Ja sam toliko zakon da mi potpis opće ne treba. I ako komentirate moj potpis (kojeg nemam) bacit ću nuklearku na Vas bez da je aktiviram!
16 godina
neaktivan
offline
RE: Borland c++ problem
beno101 kaže...
1domagoj1 kaže...

Nikad mi nije bilo jasno zašto ljude uče krivo u školama

Isprike autoru teme što sam ugašena tema (offtopic).

Ali, znam jednog lika, u srednjoj su programirali u PASCALU, dobio zadatak, prvi ga riješio i točno naravno, ali je dobio jedinicu jer je koristio naredbu koju još nisu učili, to je uredu???

Lupam bezveze,ali ako je zadatak bio naći veličinu stringa, a on iskoristio strlen (koji se nije radio), a trebalo je for petljom prebrojat slova, onda mu rješenje ne bi trebalo bit priznato :D

(btw ovo su C-ovske naredbe, pascala se ne sjećam)

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
17 godina
moderator
online
RE: Borland c++ problem
beno101 kaže...
1domagoj1 kaže...

Nikad mi nije bilo jasno zašto ljude uče krivo u školama

Isprike autoru teme što sam ugašena tema (offtopic).

Ali, znam jednog lika, u srednjoj su programirali u PASCALU, dobio zadatak, prvi ga riješio i točno naravno, ali je dobio jedinicu jer je koristio naredbu koju još nisu učili, to je uredu???

Ne volim razglabati o takvim stvarima jer nikad ne znaš što se točno dogodilo. Mislim da bi od profesora bilo korektno da ga upozori na to da je koristio naredbu koju nisu učili i da mu je dao šansu da objasni kako bi to riješio bez te naredbe. Pa ako onda ne zna - onda mu ne bi trebao priznati zadatak. S druge strane, upotreba naredbe koju još nisu učili mogla bi se protumačiti i kao nešto napredno. Ali opet, ako učenik ne zna riješiti problem bez te naredbe, znači da nije usvojio gradivo.

15 godina
offline
Borland c++ problem

ako netko zna kak da stavim taj return neka posta, jer kad stavim return 0; javlja mi error

daj neka mi pliz neko pomogne

 

#include<stdio.h>

main()

{

int i,zbr=0;

for(i=1;i<30;i++){

if(i%9==0){

zbroj=zbroj+i;}}

printf("\n Zbroj je %d.",zbr);

}

 

tako izgleda zadatak koji je napravljen na laboratorijskim vjezbama i koji je radio

Svrzic
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Borland c++ problem
Svrzic kaže...

ako netko zna kak da stavim taj return neka posta, jer kad stavim return 0; javlja mi error

daj neka mi pliz neko pomogne

 

#include<stdio.h>

main()

{

int i,zbr=0;

for(i=1;i<30;i++){

if(i%9==0){

zbroj=zbroj+i;}}

printf("\n Zbroj je %d.",zbr);

}

 

tako izgleda zadatak koji je napravljen na laboratorijskim vjezbama i koji je radio

 

Greška ti je bila u ovoj liniji: "zbroj=zbroj+i;}}" jer varijabla zbroj nije bila definirana.

 

#include<stdio.h>

main()

{

int i,zbr=0;

for(i=1;i<30;i++)

{

 if(i%9==0)

 {

 zbr=zbr+i;

 }

}

printf("\n Zbroj je %d.",zbr);

return 0; 

}

 

Divide et Impera! ( :
17 godina
offline
Borland c++ problem

Plus što nije definirao povratnu vrijednost main funkcije

 

 

 

#include<stdio.h>

int main()

{

int i,zbroj=0;

for(i=1;i<30;i++){

if(i%9==0){

zbroj=zbroj+i;}}

printf("\n Zbroj je %d.",zbroj);

return 0;

}

 

nema zagrade viška, samo bi se moglo bez zagrada i za for i za if, pošto obje naredbe imaju jednu naredbu ispod sebe, a ne blok

 

Poruka je uređivana zadnji put ned 13.2.2011 14:10 (Floki).
 
1 0 hvala 0
17 godina
moderator
online
Re: Borland c++ problem
Svrzic kaže...

ako netko zna kak da stavim taj return neka posta, jer kad stavim return 0; javlja mi error

Napiše ti "error" i to je to? Zašto ne napišeškoju grešku ti javi?

 

Svrzic kaže...

ako netko zna kak da stavim taj return neka posta, jer kad stavim return 0; javlja mi error

 

#include<stdio.h>

main()

Vraćaš vrijednost iz funkcije main, a nisi definirao tip povratne vrijednosti! Da, kao što je BolestanUm napisao, zagrada viška je problem, ali i ovo bi trebao ispraviti.

16 godina
neaktivan
offline
Re: Borland c++ problem

Ako stavljate return u mainu onda treba biti int main ()

 

btw ako se treba zbrojiti sve brojeve od 1 do N koji su djeljivi s 9 to se može napraviti ovako:

 

zbroj=0;

if (N>=9)

{

      for (i=9;i<=N;i+=9)

       zbroj+=i;

}

 

ili bez petlje:

zbroj=0;

 

if (N>=9)

zbroj=9* ( (N/9 * (N/9 +1)) /2 );

 

u zagradi se ne može kratit jer se radi o cjelobrojnom dijeljenju pa bi mogli nešt dobit viška.

 

 

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Poruka je uređivana zadnji put ned 13.2.2011 14:16 (Luuka).
14 godina
neaktivan
offline
Borland c++ problem

Nije potrebno stavljat int ispred main(), dakle:
main ()
int main ()
to je ista stvar, jer kompajler ukoliko nema povratnog tipa ispred funkcije sam doda 'int'.

ALI, po 'programerskom bontonu' preporučljivo je eksplicitno definirati povratni tip. Ukratko uvijek pišite: 'int main()' umjesto 'main()'. {#} 

Divide et Impera! ( :
 
0 0 hvala 0
17 godina
offline
Re: Borland c++ problem
BolestanUm kaže...

Nije potrebno stavljat int ispred main(), dakle:
main ()
int main ()
to je ista stvar, jer kompajler ukoliko nema povratnog tipa ispred funkcije sam doda 'int'.

ALI, po 'programerskom bontonu' preporučljivo je eksplicitno definirati povratni tip. Ukratko uvijek pišite: 'int main()' umjesto 'main()'. {#} 

Šipak je tako ,moj kompajler nije tako bistar

 

 

1>------ Build started: Project: vjezbe, Configuration: Debug Win32 ------

1>  main.cpp

1>c:\users\zeljko\documents\visual studio 2010\projects\vjezbe\vjezbe\main.cpp(3): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Poruka je uređivana zadnji put ned 13.2.2011 14:23 (Floki).
14 godina
neaktivan
offline
Re: Borland c++ problem
Floki kaže...
BolestanUm kaže...

Nije potrebno stavljat int ispred main(), dakle:
main ()
int main ()
to je ista stvar, jer kompajler ukoliko nema povratnog tipa ispred funkcije sam doda 'int'.

ALI, po 'programerskom bontonu' preporučljivo je eksplicitno definirati povratni tip. Ukratko uvijek pišite: 'int main()' umjesto 'main()'. {#} 

Šipak je tako ,moj kompajler nije tako bistar

 

 

 

1>------ Build started: Project: vjezbe, Configuration: Debug Win32 ------

1>  main.cpp

1>c:\users\zeljko\documents\visual studio 2010\projects\vjezbe\vjezbe\main.cpp(3): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

 

 

Hmm, nisam zna da c/c++ kompajler Visual Studia pada na tom. Zanimljivo. Kod ostalih prolazi {#} Ma za c i c++ -> DevCpp (jos posebice Portable) FTW!!! {#}

Divide et Impera! ( :
15 godina
offline
Re: Borland c++ problem
BolestanUm kaže...
Svrzic kaže...

ako netko zna kak da stavim taj return neka posta, jer kad stavim return 0; javlja mi error

daj neka mi pliz neko pomogne

 

#include<stdio.h>

main()

{

int i,zbr=0;

for(i=1;i<30;i++){

if(i%9==0){

zbroj=zbroj+i;}}

printf("\n Zbroj je %d.",zbr);

}

 

tako izgleda zadatak koji je napravljen na laboratorijskim vjezbama i koji je radio

 

 

Greška ti je bila u ovoj liniji: "zbroj=zbroj+i;}}" jer varijabla zbroj nije bila definirana.

 

#include<stdio.h>

main()

{

int i,zbr=0;

for(i=1;i<30;i++)

{

 if(i%9==0)

 {

 zbr=zbr+i;

 }

}

printf("\n Zbroj je %d.",zbr);

return 0; 

}

 

sad sam skužio da sam stavio u int zbr, a tamo dole zbroj, ali nije u tom problem

meni izbaci Function should return a value

daj samo napisite kaj bi ja trebao dodat u tom zadatku da mi radi

nemojte nista mi govorit o standardima jer radimo u Borland C++ v2.0 1991/92

samo napišite kakav return moram stavit

 

Svrzic
17 godina
neaktivan
offline
Re: Borland c++ problem
BolestanUm kaže...

Nije potrebno stavljat int ispred main(), dakle:
main ()
int main ()
to je ista stvar, jer kompajler ukoliko nema povratnog tipa ispred funkcije sam doda 'int'.

ALI, po 'programerskom bontonu' preporučljivo je eksplicitno definirati povratni tip. Ukratko uvijek pišite: 'int main()' umjesto 'main()'. {#} 

Iako i g++ pretpostavlja da je povratni tip int, te sam to obavi i stavi samo warning, to apsolutno nije dobra praksa jer C99 i C++ Standard eksplicitno nalažu da se definira povratni tip. Kao što vidiš Flokijev slučaj je samo potvrda toga. Uvijek navodite povratni tip...

 

#include<stdio.h>

int main()

{

int i,zbr=0;

for(i=1;i<30;i++)

{

 if(i%9==0)

 {

 zbr=zbr+i;

 }

}

printf("\n Zbroj je %d.",zbr);

return 0; 

}

 

Evo.

Q: a kako se to linux ponasa kad crkne hdd? A: zastekava svakih 60 sec,ali prezivi se
Poruka je uređivana zadnji put ned 13.2.2011 14:54 (1domagoj1).
17 godina
moderator
online
Re: Borland c++ problem
BolestanUm kaže...
Hmm, nisam zna da c/c++ kompajler Visual Studia pada na tom. Zanimljivo. Kod ostalih prolazi {#} Ma za c i c++ -> DevCpp (jos posebice Portable) FTW!!! {#}

Na tome pada kompajler ili programer?

 

The ANSI/ISO C Standard specifies that the main function be declared in one of the following two ways:

 int main (void);

or

 int main (int argc, char **argv);

In both cases the return type is an int, and your main function should therefore either return an int or call the library function exit, when the program ends. The C++ standard includes a similar requirements for C++ programs.

Since the runtime environment assumes that main returns an int, declaring main with any other return type, including void, invites trouble. The compiler might compile such a program, since the ANSI Standard doesn't require it to fail, but the behavior of such a program is, in the Standard's parlance, "undefined" (read: anything can happen). That is why GCC will print a warning in these cases if you use the -Wall switch.

To summarize, using void main is unsafe and can potentially do evil things to your program. It is best to avoid it.

Note that the C++ standard, in contrast to the C standard, explicitly prohibits void main(), and explicitly says that if the controls reaches the end of main without encountering a return statement, the effect is that of executing return 0;. When compiling a C++ program, GCC automatically generates the code to return zero from the main function, in case the programmer leaves that out.

 

16 godina
neaktivan
offline
Re: Borland c++ problem
Svrzic kaže...

sad sam skužio da sam stavio u int zbr, a tamo dole zbroj, ali nije u tom problem

meni izbaci Function should return a value

daj samo napisite kaj bi ja trebao dodat u tom zadatku da mi radi

nemojte nista mi govorit o standardima jer radimo u Borland C++ v2.0 1991/92

samo napišite kakav return moram stavit

Pa sve ti piše. Function must return a value, odnosno da funkcija (u ovom slučaju main) mora imati povratnu vrijednost. Dakle treba ići int main(), ti imaš bez ovog int.

Tip ispred imena fje označava koji tip varijable fja vraća.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: Borland c++ problem

Pa kopiraj ovaj kod koji sam ti napisao. Tu ti je i ispravljen zbr i dodan return. Meni radi. Ako ti i dalje ne radi -> dodaj jošint ispred 'main'-a.

Divide et Impera! ( :
15 godina
offline
Borland c++ problem

#include<stdio.h>

main()

{

int i,zbr=0;

for(i=1;i<30;i++)

{

 if(i%9==0)

 {

 zbr=zbr+i;

 }

}

printf("\n Zbroj je %d.",zbr);

return 0; 

}

evo to sam napisao i javlja mi Linker warning: No module definition file specified: using defaults

kaj da napravim?? to mi isto javlja kada stavim int main()

Svrzic
Moj PC  
0 0 hvala 0
17 godina
moderator
online
Re: Borland c++ problem
Svrzic kaže...
evo to sam napisao i javlja mi Linker warning: No module definition file specified: using defaults

To ti nema veze s tim programom, nego s linkerom. A zbilja ti ne mogu reći što da napraviš s tim. Meni se Dev-C++ ništa ne žali. Promijeni kompajler/linker. {#}

 

Svrzic kaže...
to mi isto javlja kada stavim int main()

Zašto ne staviš i ostavišint main() - dakle, ona kako je po propisu? Zašto inzistiraš na pogrešnom deklariranju funkcije main?

 

Poruka je uređivana zadnji put ned 13.2.2011 16:07 (mbaksa).
15 godina
offline
Re: Borland c++ problem
mbaksa kaže...
Svrzic kaže...
evo to sam napisao i javlja mi Linker warning: No module definition file specified: using defaults

To ti nema veze s tim programom, nego s linkerom. A zbilja ti ne mogu reći što da napraviš s tim. Meni se Dev-C++ ništa ne žali. Promijeni kompajler/linker. {#}

 

Svrzic kaže...
to mi isto javlja kada stavim int main()

Zašto ne staviš i ostavišint main() - dakle, ona kako je po propisu? Zašto inzistiraš na pogrešnom deklariranju funkcije main?

 

zato sto mi u skoli radimo sa main()

Svrzic
17 godina
moderator
online
Re: Borland c++ problem
Svrzic kaže...
mbaksa kaže...
Svrzic kaže...
to mi isto javlja kada stavim int main()

Zašto ne staviš i ostavišint main() - dakle, ona kako je po propisu? Zašto inzistiraš na pogrešnom deklariranju funkcije main?

 

zato sto mi u skoli radimo sa main()

Reci profesoru nek posjeti Bugov forum - možda nešto i nauči. {#} U najmanju ruku, možeš ga pitati u stilu "Profesore - zar ne bi trebalo ići int main()? Vidio sam da nekima, recimo u Visual Studiju tom i tom, ne prolazi kompajliranje programa ako ne napišu ključnu riječ int ispred main".

15 godina
offline
Re: Borland c++ problem
mbaksa kaže...
Svrzic kaže...
mbaksa kaže...
Svrzic kaže...
to mi isto javlja kada stavim int main()

Zašto ne staviš i ostavišint main() - dakle, ona kako je po propisu? Zašto inzistiraš na pogrešnom deklariranju funkcije main?

 

zato sto mi u skoli radimo sa main()

Reci profesoru nek posjeti Bugov forum - možda nešto i nauči. {#} U najmanju ruku, možeš ga pitati u stilu "Profesore - zar ne bi trebalo ići int main()? Vidio sam da nekima, recimo u Visual Studiju tom i tom, ne prolazi kompajliranje programa ako ne napišu ključnu riječ int ispred main".

mog profesora nesmijes niti pitati kako "ono radi", a kamoli zakaj radimo po starom standardu

Svrzic
Nova poruka
E-mail:
Lozinka:
 
vrh stranice