Potrebuješ na to vážne cyklus v cykle?
Dvakrát ti to vypíše preto, že funkcia [c]getchar()[/c] načíta len
jeden znak z vrcholu vstupného zásobníka (čím ho odstráni) a ostatné nechá tak ako sú.
Takže to znamená, že po spustení programu vypíšeš prvých desať číslic, vypíšeš otázku a čakáš na vstup od používateľa - ten zadá znak (akýkoľvek, dúfaš že je jeden -
toto si skús ošetriť sám, aby keď zadáš "aaa" vypísalo len jednu dekádu číslic a nie tri) a
enter, lenže zrada je v tom, že aj to je znak ako každý iný.
Preto tvoj [c]getchar()[/c] vyberie ten prvý "platný" znak, ale v zásobníku stále zostáva
minimálne ešte ten enter - ten sa vyberie pri nasledujúcej iterácií a keďže to nemáš ošetrené, správa sa to takto.
Kód:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 0; // iterator
int stop = 10; // pomocna premenna
int pokracuj = 1; // flag
while (pokracuj == 1) {
stop--;
i++; // iterator zvysis o jedna
printf("%d\n", i); // vypises cislo
if (stop == 0) {
printf("Mam pokracovat? [A/N]\n");
int c = getchar();
getchar(); // nacitas este "enter" - da sa pouzit aj scanf, najdi si o tom nieco
// TODO: osetrit viac ako jeden zadany znak (..aaa, aan, an)
if (c == 97 || c == 65) {
// pokracujeme
pokracuj = 1;
} else if (c == 110 || c == 78) {
// nepokracujeme
pokracuj = 0;
} else {
printf("!!! neplatny znak\n");
// nepokracujeme - chyba
pokracuj = 0;
}
stop = 10; // reset pomocnej premennej
}
}
return 0;
}