muze mi nekdo vysvetlit, proc scanf v nize uvedenem kodu poprve necha uzivatele zadat hodnotu a podruhe (pokud prvni vstup bylo napr. pismeno) uz ne?
int main(int argc, const char * argv[])
{
int vstup, n, i = 1, pocet = 0;
printf("Napis pocet cisel, ktera budes zadavat.\n");
scanf("%d", &n);
for ( ; n > 0 ; n--) {
printf("Zadej %d. cislo.\n", i);
if ((scanf("%d", &vstup)) != 1) {
n++;
continue;
}
if (vstup >= 25 && vstup <= 38) {
pocet++;
}
i++;
}
printf("Z vami zadanych cisel jsou %d cisla z intervalu <25, 38>.\n", pocet);
return 0;
}
Kod je mysleny tak, aby pri chybnem vstupu opakoval vyzvu pro zadani hodnoty a jeji zadani. Ovsem kdyz zadam nenumericky vstup, tak uz scanf nefunguje a "krasne" se mi to zacykli. Je mi jasny, ze je problem ve scanf, ale nechapu, jak se v tomto pripade chova..
no jde o to, ze kdyz ti nekdo zada treba pismeno, tak pri nacitani cisla se to pismeno neodstrani ... takze pri kazdem opakovani tam mas porad pismeno... (uzivatel uz toho moc nezada)
Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Ahoj, mam tu podobnou vec. Jedna se o fscanf. Kdyz dam "%d ", tak mi to vrati spravny soucet 1001. Pokud dam jen "%d", tak mi to nacte cislo '2' dvakrat. Proc to tak je?
Ja si to (ocividne spatne) vysvetluju tak, ze po nacteni dvojky je uz jen EOF (tedy -1), proto nechapu proc to nacita '2' dvakrat.. Predem diky. (to horni je ukazka souboru, z ktereho program cte)
$$$998
$1
$$$$$$$$$$$$$$$$$$$$$2
FILE *fr;
int c, cislo, soucet = 0;
if ( (fr = fopen("soucet.txt", "r")) == NULL )
printf("Soubor se nepodarilo nacist.\n");
while (1) {
while ( (c = getc(fr)) == '$')
;
ungetc(c, fr);
fscanf(fr, "%d ", &cislo);
printf("%d\n", cislo);
soucet += cislo;
if (getc(fr) == EOF)
break;
}
printf("Soucet je %d\n", soucet);
if (fclose(fr) == EOF)
printf("Soubor se nepodarilo zavrit.\n");
return 0;
V proměnné cislo zůstává načteno číslo z předchozího cyklu dokud není přepsáno právě načtenou hodnotou. Pokud tedy není načteno nic, přičte se číslo načtené v předešlém cyklu.