בתגובה להודעה מספר 6 שנכתבה על ידי שימי שמתחילה ב "מעניין
לגבי char, אתה צריך..."
עכשיו שיניתי ל-CHAR ונוצרה בעיה חדשה.
הוא לא חוזר לי ללופ של ה-WHILE.
למשל אני מכניס 1, הוא נכנס לקייס של 1 (מדפיס 1) ויוצא מהתוכנית.
ועוד שאלה, כשהשתמשתי ב-INT אז ה-DEFAULT היה כל מספר שהוא לא ב-CASE.
האם עכשיו כשאני משתמש ב-CHAR ה-DEFAULT הוא כל תו שהוא לא ב-CASE?
כלומר לא צריך לבצע בדיקות קלט?
קוד:
#include <stdio.h>
#include <string.h>
int main ()
{
int exit=0;
char choice;
while (!exit)
{
scanf("%c",&choice);
//system( "clear" );
//if (choice>'3' || choice<'1') exit=1;
switch (choice)
{
case '1':
{
printf("1\n");
break;
}
case '2':
{
printf("2\n");
break;
}
case '3':
{
printf("3\n");
break;
}
default:
{
exit=1;
break;
}
//
}
}
}
נערך לאחרונה ע"י 1111 בתאריך 28-11-2010 בשעה 15:15.
בתגובה להודעה מספר 8 שנכתבה על ידי 1111 שמתחילה ב "עוד סיבה ש-CHAR לא מתאים היא..."
קליטת char בודד מתאימה להקלקת תו בודד.
אם אתה רוצה לתפוס את כל הקייסים האפשריים, אתה יכול לקלוט מחרוזת ואז לרוץ עליה ולוודא שמדובר במספרים, אבל זה מיותר כיוון שאתה יודע מראש שהקלט שלך לא יעבור את התו הבודד (כלומר, האופציות הן ספרה אחת).
אתה יכול לקלוט את הבחירה שלך למשל ב getchar ואז ברגע שהמשתמש לוחץ במקלדת על המקש, זה ישר נקלט (ללא צורך לחכות ל enter). זה יפתור לך את הבעיה כיוון שגם אם ינסה להכניס "26", התפריט יטפל ב "2" לפני שיספיק ללחוץ על 6.
אם אתה רוצה לאפשר למשתמש ללחוץ על כל צירוף אפשרי, ואז enter, אתה יכול להכניס את הקלט למחרוזת של X תווים כך תוכל לבדוק מה המשתמש הכניס לך.
נגיד משהו כזה:
זהירות - ספויילר!
קוד PHP:
#include <stdio.h> #include <string.h>
int main () { int exit=0; char choice[10];
while (!exit) { printf("enter a number\n"); fflush(stdin); scanf("%s", choice); if ((strlen(choice) == 1) && (choice[0] > '1') && (choice[0] < '7')) switch (choice[0]) { case '1': { printf("1\n"); break; } case '2': { printf("2\n"); break; } case '3': { printf("3\n"); break; } default: { printf ("worng input\n"); exit=1; break; } } else printf ("illegal choice...\n"); } }