Diskuze: Nefunguje mi cyklus do while

C++ C a C++ Nefunguje mi cyklus do while

Avatar
ra3sk
Člen
Avatar
ra3sk:

Znova tu mám taký banálny problém. Keď spustím tento kód:

int main(int argc, const char * argv[]) {
    //deklarácia premenných
    int operacia,prvecislo,druhecislo,opakovanie;


    do {printf("Ahoj. Dakujem ze si si ma stiahol. Ja som kalkulacka a vypocitam tvoje priklady.\n Toto je zoznam operacii ktore ti ponukam:\n 1 - scitanie\n 2 - odcitanie\n 3 - sucin\n 4 - podiel\n Napis cislo tej operacie ktoru chces vykonat: ");
    scanf("%d",&operacia);
    switch (operacia) {
        case 1:
            printf("\nVybral si si operaciu cislo %d.\n Prosim zadaj prve cislo: ", operacia);
            scanf("%d",&prvecislo);
            printf("\n Prosim zadaj druhe cislo: ");
            scanf("%d",&druhecislo);
            printf("Sucet zadanych cisel je %d", prvecislo+druhecislo);
            break;
        case 2:
            printf("\nVybral si si operaciu cislo %d.\n Prosim zadaj prve cislo: ", operacia);
            scanf("%d",&prvecislo);
            printf("\n Prosim zadaj druhe cislo: ");
            scanf("%d",&druhecislo);
            printf("Rozdiel zadanych cisel je %d", prvecislo-druhecislo);
            break;
        case 3:
            printf("\nVybral si si operaciu cislo %d.\n Prosim zadaj prve cislo: ", operacia);
            scanf("%d",&prvecislo);
            printf("\n Prosim zadaj druhe cislo: ");
            scanf("%d",&druhecislo);
            printf("Sucin zadanych cisel je %d", prvecislo*druhecislo);
            break;
        case 4:
            printf("\nVybral si si operaciu cislo %d.\n Prosim zadaj prve cislo: ", operacia);
            scanf("%d",&prvecislo);
            printf("\n Prosim zadaj druhe cislo: ");
            scanf("%d",&druhecislo);
            printf("Podiel zadanych cisel je %d", prvecislo/druhecislo);
            break;

        default:
            printf("Nezadal si ziadne cislo");
            break;
    }
        printf("\nChces este pokracovat v pocitani? a/n :");
        opakovanie=getchar();

    }while(opakovanie =='a');

    return 0;
}

Cyklus sa skončí skôr ako budem môcť načítať hodnotu do premennej opakovanie. Prečo? Za každý názor budem vďačný a predom ďakujem za odpovede.

 
Odpovědět 6.11.2015 23:18
Avatar
Sony Nguyen
Redaktor
Avatar
Odpovídá na ra3sk
Sony Nguyen:

Když používáš scanf, tak potvrzení hodnoty uděláš enterem, tudíž ti getchar vrátí '\n' okamžitě.
Řešení:
buď změníš podmínku whilu na opakovanie != 'n' nebo použiješ na načtení znaku opět scanf.

Snad pomohlo :)

 
Nahoru Odpovědět  +1 6.11.2015 23:39
Avatar
Sony Nguyen
Redaktor
Avatar
Odpovídá na ra3sk
Sony Nguyen:

Promiň, večer už mi to moc nemyslí, měnit tu podmínku je ptákovina a zacyklilo by se :D
Ale jestliže první getchar zežere první whitespace, můžeš tam mít druhé volání getchar, které už načte znak nebo scanf(" %c", &znak);
PS ta mezera u scanf musí být jinak by to taky žralo whitespace

Editováno 6.11.2015 23:47
 
Nahoru Odpovědět 6.11.2015 23:44
Avatar
Jozef
Člen
Avatar
Odpovídá na ra3sk
Jozef:

Použi toto:

scanf(" %c",&opakovanie);

namiesto:

opakovanie=getchar();

a premennú operácie nemaj ako int, ale char.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 7.11.2015 8:56
I'm not afraid to die on a treadmill
Avatar
Odpovídá na ra3sk
Libor Šimo (libcosenior):

Stačí vyprázdniť buffer:

fflush(stdin); // vyprázdni bufer
printf("\nChces este pokracovat v pocitani? a/n :");
opakovanie=getchar();
Nahoru Odpovědět 7.11.2015 9:35
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.