PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   switch i system("pause") (https://forum.pcekspert.com/showthread.php?t=161721)

Hao 06.10.2009. 01:52

switch i system("pause")
 
upišem decimalni broj kao x i beskonačna petlja, kako riješiti problem?
stavim float x; javlja grešku kod switch, znam i zašto.
kada stavim system("pause"); poslije svega unutar glavnog bloka naredbi, taman prije zadnje } javlja grešku, a i kada stavim poslije printfa u case-u 2, prije breakea. Zašto mi neće system("pause"); ???
mislim da mi je tu grešku javljao i prije u nekim programima koje sam sad radio.
EDIT: negdje sam bio naletio da je netko rekao da bi se system("pause") trebao što manje upotrebljavati. zašto?




Code:

#include
main()
{
      int x;
      pocetak:
              printf("Upisi 1 ili 2 i stisni enter: ");
              scanf("%d",&x);;
              switch(x)
              {
              case 1: printf("Katarina, odabrala si krivi broj! :P\n");
                      goto pocetak;
                      break;
              case 2: printf("Katarina VOLIM TE! ! ! ! ! <3");
                      break;
              default: printf("Katarina rekao sam 1 ili 2, sad bi ona %d =_=\n",x);
                      goto pocetak;
                      break;
                      }
      }


Hao 07.10.2009. 20:20

ajde sad, toliki ljude sam vidio da se bahate i prave pametni te se razmeću svojim znanjem kao da su postigli nešto nemoguće za postići, naučiti programirati, a sada kada tražim pomoć tajac.

Dancho 08.10.2009. 09:36

@Hao
1.polako momak,mozda oni clanovi foruma koji znaju programirati nisu vidjeli tvoj post...
2.da bi koristio system funkciju moras ukljuciti stdlib.h header posto je ona tamo deklarirana
3.evo ovo bi trebalo raditi ( btw goto naredba je :nono: )

Code:

#include
int main()
{
      unsigned int x=0;
        do
        {
                printf("Upisi 1 ili 2 i stisni enter:");
                scanf("%u",&x);
                if( x==1 )
                    printf("Katarina, odabrala si krivi broj! :P\n");
                else if( x==2 )
                {
                    printf("Katarina VOLIM TE! ! ! ! ! <3\n");
                        break;
                }
                else
                    printf("Katarina rekao sam 1 ili 2, sad bi ona %u =_=\n",x);
        }while(1);

        return 0;
}


Hao 11.10.2009. 15:20

ok a sada da analiziram šta tvoj program radi. ja ne mogu tako nešto napisati jer nikada nismo radili s unsigned int, return 0 niti while(1) možeš li molim te objasniti šta to znači? radio sam sa dowhile petljom ali uvijek tipa while(uvjet). unsigned int, jel to znači bez predznaka, i zašto to ovdje paše bolje od običnog int?
ovaj break razumijem, on prekida cijelu tu dowhile petlju.
što znači return 0?
koja je razlika između int main() i običnog main()
zašto da ne koristim goto naredbu?

munst0r 11.10.2009. 17:09

Citiraj:

Autor Hao (Post 1453112)
ok a sada da analiziram šta tvoj program radi. ja ne mogu tako nešto napisati jer nikada nismo radili s unsigned int, return 0 niti while(1) možeš li molim te objasniti šta to znači? radio sam sa dowhile petljom ali uvijek tipa while(uvjet).

Ovaj 1 je isto uvjet, ali je on uvijek istinit. Dakle, time smo dobili beskonacnu petlju. Tj. bila bi beskonacna da unutar nje nema onog breaka, koji ce ju u odredjenom trenutku prekinuti.
Ti mozes umjesto while(1) napisati while(x != 2) i izbaciti onaj break iz else if bloka.

Citiraj:

Autor Hao (Post 1453112)
unsigned int, jel to znači bez predznaka, i zašto to ovdje paše bolje od običnog int?

Da, unsigned je bez predznaka. Recimo da je dobra praksa koristiti unsigned varijable dok znas da nikada neces u njih pohranjivati negativne brojeve, ali u tvom slucaju je to potpuno nebitno. Slobodno koristis obican (signed) int.


Citiraj:

Autor Hao (Post 1453112)
što znači return 0?
koja je razlika između int main() i običnog main()

Opet, i jedno i drugo ce raditi jednako, ali je bolja praksa napisati int main() nego samo main(). Naime, svaki program bi, neposredno prije gasenja, trebao vratiti operativnom sustavu nekakvu povratnu informaciju o tome da li se ugasio uspjesno, ili je mozda doslo do neke greske.
Ako napises samo main(), to znaci da glavna funkcija pri svom zavrsetku nece vratiti nista, dok ce int main() vratiti neki broj. return 0 upravo radi to, vraca nulu operativnom sustavu neposredno prije nego tvoj program zavrsi s izvodjenjem, a nula se obicno koristi kao podatak da je program uredno zavrsio sa svojim radom.

Citiraj:

Autor Hao (Post 1453112)
zašto da ne koristim goto naredbu?

Goto naredbe su odavno izbacene iz upotrebe u svim visim programskim jezicima i treba ih potpuno izbjegavati. One narusavaju linearnost izvodjenja programskog koda, otezavaju prevodjenje programa u strojni kod te cine sam izvorni kod nepreglednim, neorganiziranim te su cesti uzrok greskama.

Hao 11.10.2009. 20:34

hvala obojici!


Sva vremena su GMT +2. Sada je 11:09.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger