Trending News
C語言while & switch
再請問大家
程式為反覆詢問輸入值,輸入A顯示1,輸入Z顯示10
直到輸入Q顯示10並離開
#include <stdio.h>
int main (void)
{char letter;
do{printf("Enter a letter.\n");
scanf("%c", &letter);
switch (letter)
{case 'A':
printf("The number is 1.\n");
break;
case 'Q':
case 'Z':
printf("The number is 10.\n");
break;
default:
printf("Plz enter again.\n");
break;}
}while(letter!='Q');
printf("EXIT!!\n");
return 0; }
不過顯示時卻出現滿奇怪的問題
Enter a letter.
A
The number is 1.
Enter a letter.
Plz enter again.
Enter a letter.
也就是說所有輸出都正確(包括A, Z, S),卻多了這2行
(除了Q,他直接顯示10,EXIT)
Enter a letter.
Plz enter again.
為什麼會這樣ㄋ?
3 Answers
- 龍Lv 72 decades agoFavorite Answer
原因是因為scanf裡有一個buffer. 當你輸入a時你打進'a'和'\n'. scanf就把你輸入的存入buffer裡. 因你只要一個char, 所以scanf給你'a'而把'\n'留在buffer裡. 下一次你再用scanf時, scanf看到它還有一個'\n'在buffer裡. 所以scanf把'\n'給你. 如果你把scanf("%c", letter);改成scanf("%c%c", letter, tmp);就可以了. 因letter會是你打進的字母. tmp會是'\n'.
#include <stdio.h>
int main (void)
{
char letter, tmp;
do{
printf("Enter a letter.\n");
scanf("%c%c", &letter, &tmp);
switch (letter)
{
case 'A':
printf("The number is 1.\n");
break;
case 'Q':
case 'Z':
printf("The number is 10.\n");
break;
default:
printf("Plz enter again.\n");
break;
}
} while(letter!='Q');
printf("EXIT!!\n");
return 0;
}
或你可以在switch之後清除scanf裡的buffer也可以
#include <stdio.h>
int main (void)
{
char letter;
do{
printf("Enter a letter.\n");
scanf("%c", &letter);
switch (letter)
{
case 'A':
printf("The number is 1.\n");
break;
case 'Q':
case 'Z':
printf("The number is 10.\n");
break;
default:
printf("Plz enter again.\n");
break;
}
while(getchar() != '\n') continue;
} while(letter!='Q');
printf("EXIT!!\n");
return 0;
}
不知這樣講你懂不懂, 不懂請再問
Source(s): Myself, http://www.linuxquestions.org/questions/archive/9/... - 2 decades ago
你的問題在於你的do迴圈跑了兩次,而第二次並沒有執行scanf那一行。
修正了一下~用continue萊跳出enter的問題~可以維持只使用一個變數~
#include <stdio.h>
#include <string.h>
#include <iostream>
int main (void)
{
char letter;
printf("Enter a letter.\n");
while (getchar(letter)==1&&letter!='Q')
{
switch (letter)
{
case 'A':
printf("The number is 1.\n");
break;
case 'Z':
printf("The number is 10.\n");
break;
default:
printf("Plz enter again.\n");
break;
}
printf("Enter a letter.\n");
}
printf("EXIT!!\n");
return 0;
}
你可以在你程式碼的第五行後面加一行 printf("%c\n",letter);
萊檢查多跑的那圈迴圈,她的letter值是多少。