Pomoc oko goto

1

Pomoc oko goto

offline
  • Pridružio: 08 Avg 2011
  • Poruke: 59

Posto sam pocetnik ne znam kako da uradim sledece. Hteo bih da napravim kada pogresim koliko godina imam (false) da me opet vrati na pocetak. npr Citat:Koliko imam godina?
>15
imam malo vise, pokusaj ponovo.

koliko imam godina?


  1. #include <stdio.h>
  2. int main()
  3. {
  4. int godina,pocetak;
  5. godina=17;
  6. pocetak:
  7. printf("koliko ja imam godina?\n");
  8. scanf("%d",&godina);
  9. if (godina==17) {
  10.  printf("pogodio si!\n");
  11. }
  12. if (godina>17){
  13. printf("imam manje, pokusaj ponovo\n");
  14. goto pocetak;
  15. }
  16. if(godina<17)
  17. {
  18. printf("imam vise, pokusaj ponovo\n");
  19. goto pocetak;
  20. }
  21. return 0;
  22. }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Koristi neku varijantu "while" petlje, npr:

  1. int n;
  2. while (scanf("%d", &n)){
  3.    if(n==17){
  4.           printf("Pogodio si!\n", n);
  5.           return 0;
  6.    }
  7.    else printf("Greszka, ponovo");
  8. }



offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

goto je davno izbacen. Odnosno, ta paradigma 'spageti progrmairanje' je izbacena i zastarela Smile

koristi ovu ideju:
Imas indikator , promenljivu pogodio = 0;

  1. while(pogodio == 0)
  2. {
  3.  // tvoje naredbe
  4. //kad pogodi broj stavis sta treba i plus napises
  5.  pogodio=1;
  6. }


edit:
pretece me soxxx

offline
  • Pridružio: 08 Avg 2011
  • Poruke: 59

  1. #include <stdio.h>
  2. int main(){
  3. int god;
  4. if (god==17){
  5. printf("pogodio si!\n");
  6. }
  7. while (scanf("%d", &god)){
  8.    if(god==17){
  9.           printf("Pogodio si!\n", god);
  10.           return 0;
  11.    }
  12.    else printf("Greska, ponovo");
  13. }
  14. return 0;
  15. }

izbaci
Citat:

godine.c: In function ‘main’:
godine.c:9:11: error: too many arguments for format [-Werror=format-extra-args]
cc1: all warnings being treated as errors

offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

  1. printf("Pogodio si!\n", god);

zaboravio si %d da stavis u ispis
drugo
  1. int god;
  2. if (god==17){

proveravas neinicijalizovanu vrednost. Ko zna sta se tu nalazi.. a mozda bas i broj 17 Very Happy

dakle, stavi npr
  1. int god=0;

offline
  • Pridružio: 08 Avg 2011
  • Poruke: 59

  1. #include <stdio.h>
  2. int main(){
  3.    int number;
  4.       int valid = 0;
  5.       
  6.       while( valid == 0 ) {
  7.          printf("Enter a number between 1 and 10 ");
  8.          scanf("%d", &number);
  9.          if( number < 1 ) {
  10.             printf("Number is below 1. Try again\n");
  11.             valid = 0;
  12.          }
  13.          else if( number > 10 ) {
  14.             printf("Number is above 10. Try again\n");
  15.             valid = 0;
  16.          }
  17.          else
  18.             valid = 1;
  19. printf("The number is %d\n", number );
  20.       }
  21. return 0;
  22. }

evo nasao sam nesto sto je slicno mom programu... e sad kad sam bio upisao "clear" u terminalu poceo je da mi spamuje "Number is above 10.Try again" "Number is below 1. Try again" moguce zato sto nisam ispisao uslov da mogu samo brojevi da se upisuju samo ... jel mozes da mi kazes sta sad da radim?

offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Zasto nisi samo ubacio izmene na svoj kod. Sta ce ti taj sto si skinuo.
Na greskama se uci.

I gde upisujes clear, kad treba da uneses broj? Pitanje je kako on to reprezentuje i sta vidi u tom delu memorije. Moguce da ga vidi kao neki broj pa zato dobijas to sto dobijes.

offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Evo ti primer koji radi, nadam se da razumes kod, ako ne pitaj. Dole smo definisali broj godina pomocu #define, tako da ako ubuduce menjas broj godina treba samo da izmenis tu #define liniju, a ne na tri mesta u kodu gde proveravas unos. Kada je upit tacan (broj==BROJ_GODINA) izlazimo iz petlje i programa sa return 0;. U druga dva slucaja kada je broj manji ili veci samo ispisujemo da broj nije tacan, i dalje se opet vracamo na while petlju.

  1. #include <stdio.h>
  2.  
  3. #define BROJ_GODINA 17
  4.  
  5. int main(int argc, char *argv[]){
  6.  
  7.         int broj = 0;
  8.         while (scanf("%d", &broj)){
  9.                 if(broj==BROJ_GODINA){
  10.                         printf("Tacno! Imam: %d godina!\n", broj);
  11.                         return 0;
  12.                 }
  13.                  else if(broj>BROJ_GODINA){
  14.                         printf("Greska, imam manje od %d godina! Probaj ponovo.\n", broj);
  15.                 }
  16.                  else if(broj<BROJ_GODINA){
  17.                         printf("Greska, imam vise od %d godina! Probaj ponovo.\n", broj);
  18.                 }
  19.         }
  20. }

Sad nam napisi verziju koda koji radi ispravno koristeci metod koji ti je N1k0l4 naveo. Wink

offline
  • Pridružio: 08 Avg 2011
  • Poruke: 59

proba.c:5:14: error: unused parameter ‘argc’ [-Werror=unused-parameter]
proba.c:5:26: error: unused parameter ‘argv’ [-Werror=unused-parameter]

da dodam : nisam ne windowsu, vec na linux, pa jos kad sam ucio c na kraju sam koristio kod "getch();" a kad to upisem prikazuje gresku onda upisem "return 0;" i radi

@N1k0l4 spamovalo je kad sam mahinalno upisao clear kod upita "Enter a number between 1 and 10"

offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Verovatno kompajliras sa gcc opcijom '-Wextra' koji sadrzi '-Wunused-parameter' koji prijavljuje da se argc i argv ne koriste. argc je broj argumenata koji se zadaju programu, a argv je niz koji sadrzi te argumente - totalno nevazno sada u tvom primeru. NJih sam kucao po navici, slobodno mozes da ih izostavis (prazan main()).

Potrudi se da razumes zasto se nekad neke funkcije stavljaju u kod, nemoj samo da ih kopiras i koristis zato sto si video na netu da ih neko drugi koristi (kao npr. getch()).

Ko je trenutno na forumu
 

Ukupno su 987 korisnika na forumu :: 61 registrovanih, 3 sakrivenih i 923 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: acatomic, advokat84, amadeus, Apok, Banovo Brdo, Ben Roj, Black Luster Soldier, bojan581, bojanM84, bojcistv, Boris BM, boromir, BtR-45, burevestnik, BZ, Centauro, Chainsaw, chervoncy, d.arsenal321, Demi87, DJUNTA, doktor097, Dolinc, dozorni, Drugsparrow, Dzoni2412, ElvisP, france93, gregorxix, Igor Antonic, istina, Ivan001, jackreacher011011, lucko1, mackenzie, mdp92, Mi lao shu, MiG-29M2, MIKI63, Mskok, Natuzzi, nekdo, niksa517, NMNJ, NNPD, nobutado, Pekman, procesor, raso76, redstar72, Relixiran, skvara, Sr.Stat., Srki94, Toper, Zeljo980, zlaya011, zmajbre, Zrcalo, Žoržo, šakalakazu