
07-05-2006, 13:50
|
|
|
|
חבר מתאריך: 30.04.06
הודעות: 8
|
|
ציטוט:
|
במקור נכתב על ידי tallula
שלום רב,
אחרי כמה שנים שלא נגעתי בC התחלתי שוב...
כתבתי תוכנית פשוטה מאוד, אך משום מה היא לא כל כך מסתדרת לי...
אני לא מצליחה להבין מה לא בסדר...
אשמח אם תעזרו לי...
התוכנית:
#include<stdio.h>
int main()
{
char con='a';
int yesno=1;
printf("\n**********************\n");
printf("** Wellcome to Test **\n");
printf("**********************\nDo you want to continu: ");
while(yesno==1)
{
scanf("%c", &con);
if(con=='y')
{
printf("You choose yes.\n");
yesno=1;
}
else if(con=='n')
{
printf("You choose no.\n*Bye Bye*\n");
yesno=0;
}
else if (con!='y'&&con!='n')
{
printf("You wrong, %c is not valid.\nplease enter yes or no: \n", con);
yesno=1;
}
}
return 0;
}
הפלט:
כשלוחצים 'לא' - מקבלים את הפלט שצריך.
כשלוחצים 'כן' - הפלט הוא:
Do you want to continu: y
You choose yes.
You wrong, you enter a wrong char.
please enter yes or no:
כשלוחצים כל תו אחר הפלט הוא:
Do you want to continu: d
You wrong, you enter a wrong char.
please enter yes or no:
You wrong, you enter a wrong char.
please enter yes or no:
השאלה היא למה בכל מקרה של כן או תו אחר מופיע שוב פעם הטקסט של תו אחר.
אשמח אם תעזרו לי.
|
כאשר אתה עושה scanf הקליטה תסתיים רק לאחר לחיצת אנטר, ללא שום התייחסות לסוג הקלט הרצוי.
מאחר ובbuffer יהיה לאחר לחיצת האנטר גם את האות שהקשת וגם את האנטר עצמו,
שהלולאה תתבצע פעמיים - פעם אחת בשביל האות שהקלדת, אחריה תודפס ההודעה המתאימה, ואחרי כן עוד פעם עבור לחצן האנטר (קוד אקסי 10).
עדיף לך להשתמש בפונקציה כמו getch/getchar שמיועדת לקבל תו אחד.
מה שנכתב היה למיטב הבנתי. מקווה שזה נכון.
|