hei,
voisiko joku valaista miksi fgets joskus hyppaa suoraan eteenpain ohjelmassa odottamatta kayttajan syotetta.
tassa koodin patkaa
if (current_node->yes_ptr!= NULL && current_node->no_ptr!=NULL)
printf("question: %s\n", current_node->data);
fgets(answer, sizeof(answer), stdin);
if(strcmp(answer, yes)!=0)
current_node= current_node->no_ptr;
else
current_node= current_node->yes_ptr;
}
if (current_node->yes_ptr== NULL && current_node->no_ptr==NULL)
printf("are you thinkin of: %s\n", current_node->data);
fgets(answer, sizeof(answer), stdin);
if(strcmp(answer, yes)==0)
printf("gosh! I won");
printf("want to play again?");
fgets(answer, sizeof(answer), stdin);
if(strcmp(answer, yes)==0)
continue;
else
exit(0);
}
(pahoittelen etta postittamani koodi on pitka hankalaa havainnollistaa ongelmaa lyhemmin.)
nyt jos pelaan pelia kone tulostaa mm seuraavaa
uestion: does it live in the sea?
no
question: does it bark
yes
are you thinkin of: dog
want to play again?
wunschpx-lab2->
eli kohdissa are you thinking of ja want to play again fgets ei kysy kayttajalta syotetta. Miksi? Ohjelma kysyy kaiken jos vastaa kaikkeen no mutta uudelleen pelatessa se tulostaa kaksi kysymysta putkeen kysymatta vastausta ekaan.
eiko fgets pitaisi toimia juuri noin!
mista kiikastaa!
pahoittelen etta postittamani koodi on pitka hankalaa havainnollistaa ongelmaa lyhemmin.
kiitos kaikille avusta etukateen
voisiko joku valaista miksi fgets joskus hyppaa suoraan eteenpain ohjelmassa odottamatta kayttajan syotetta.
tassa koodin patkaa
if (current_node->yes_ptr!= NULL && current_node->no_ptr!=NULL)
printf("question: %s\n", current_node->data);
fgets(answer, sizeof(answer), stdin);
if(strcmp(answer, yes)!=0)
current_node= current_node->no_ptr;
else
current_node= current_node->yes_ptr;
}
if (current_node->yes_ptr== NULL && current_node->no_ptr==NULL)
printf("are you thinkin of: %s\n", current_node->data);
fgets(answer, sizeof(answer), stdin);
if(strcmp(answer, yes)==0)
printf("gosh! I won");
printf("want to play again?");
fgets(answer, sizeof(answer), stdin);
if(strcmp(answer, yes)==0)
continue;
else
exit(0);
}
(pahoittelen etta postittamani koodi on pitka hankalaa havainnollistaa ongelmaa lyhemmin.)
nyt jos pelaan pelia kone tulostaa mm seuraavaa
uestion: does it live in the sea?
no
question: does it bark
yes
are you thinkin of: dog
want to play again?
wunschpx-lab2->
eli kohdissa are you thinking of ja want to play again fgets ei kysy kayttajalta syotetta. Miksi? Ohjelma kysyy kaiken jos vastaa kaikkeen no mutta uudelleen pelatessa se tulostaa kaksi kysymysta putkeen kysymatta vastausta ekaan.
eiko fgets pitaisi toimia juuri noin!
mista kiikastaa!
pahoittelen etta postittamani koodi on pitka hankalaa havainnollistaa ongelmaa lyhemmin.
kiitos kaikille avusta etukateen
Vastaukset 3
Vanhimmat
Käytä fflush-funktiota (tutki helpistä) ennen fgetsiä, koska nuo I/O:t ovat puskuroivia palveluja.
Toinen vaihtoehto on asettaa stdio stdout puskuroimattomiks.
esim. unix/linux koneissa
$man setbuf
void setbuf(FILE *stream, char *buf);
elikkä, setbuf(stind, NULL);
Yks keino on että, noissa kutsuissa enne fgetsiä, heität sen '\n'
merkin printf:stä veke.
joo kirotusviheet,
stdin, stdout,
setbuf(stdin, NULL);
setbuf(stdout, NULL);