[英]Character entry causing infinite loop in C
好的,所以我搜索了幾個地方以獲得答案,我在C++
找到了相同問題的答案,但它涉及清除cin
和那些東西,我不知道如何將其轉換為C
。 事實上,如果事實上已經在其他地方回答,我會提前道歉,我只是錯過了它。 另外,請記住,我基本上是在教自己C
,除了您在此代碼中看到的內容之外,我不太了解。
基本上,我的問題是:我正在運行一個循環,要求輸入,然后使用switch
語句來選擇會發生什么。 該switch
采用int
,它適用於任何數字輸入。 但是,當你輸入一個char
時,它只是無限循環,沒有機會輸入任何其他東西。
假設這是與C++
示例中的問題相同,我查了一下 - 我不是百分之百確定它是 - 當我輸入一個char
它會被添加到緩沖區,並且永遠不會被清除,所以每次它都循環無效輸入再次使用。 在C++
清除緩沖區似乎很簡單,但我無法在C
找到任何我能理解的內容。
這是我的代碼,供參考:
int main()
{
while(1)
{
printf("(1-10) -> Run a program | (-1) -> Display menu | (0) -> Quit : ");
int quit = 0;
int select;
scanf("%d", &select);
switch(select)
{
case 1:
printf("%s", pgmRun);
helloWorld();
printf("%s", pgmEnd);
break;
//More cases here
case 0:
quit = 1;
break;
default:
printf("\n");
printf("Error: Invalid input\n");
printf("\n");
}
if(quit == 1)
break;
}
return 0;
}
在此先感謝您的幫助,對於這么長的帖子感到抱歉。 我傾向於啰嗦。 :P
fflush(stdin)
有未定義的行為。 如果要丟棄在scanf()調用后輸入的字符,可以閱讀並丟棄它們。
您可以使用getchar()
來清除角色。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.