#include <stdio.h>
int main()
{
int x, y, i, temp, sum;
char j = 'y';
do
{
...stuff...
printf ("\nPlay again? (y\\n)\n");
scanf("%c",&j);
}
while (j == 'y');
return 0;
}
程序执行一次操作并退出,无需等待用户输入。 运行一次后显示“按任意键继续”。 如何解决这个问题?
答案 0 :(得分:2)
这通常意味着您的“东西”会在输入流中留下一些字符,scanf
成功读取这些字符。由于缓冲区中的内容可能不是'y'
,因此循环终止。
一种解决方案是在执行scanf
之前刷新输入流。见How to clear input buffer in C?
由于在许多情况下缓冲区中剩余的数据通常是空格(如换行符),一个简单的解决方案可能是scanf(" %c", ...)
(注意%c
之前的额外空格)或甚至{{ 1}}。在这两种情况下,都会自动跳过待处理的空格。
答案 1 :(得分:1)
在getchar();
scanf()
即使您输入y
然后从键盘按Enter
,它也会转到scanf("%c",&j);
语句,并将'\n'
字符存储到变量j
}。所以你的while条件变得错误,从而退出循环。
所以最终的程序将如下所示:
#include <stdio.h>
int main()
{
int x, y, i, temp, sum;
char j = 'y';
do
{
// ...stuff...
printf ("\nPlay again? (y\\n)\n");
scanf("%c",&j);
getchar(); // this will clear the ENTER you press from keyboard.
}
while (j == 'y');
return 0;
}
答案 2 :(得分:0)
游戏循环中可能存在一些残余输入(至少它看起来像是你的例子中的游戏循环),然后被读入j
变量。这就是为什么你得到的似乎是一次运行,没有输入,退出场景。
要解决此问题,请尝试在再次进入播放提示之前刷新输入流。类似的东西:
fseek(stdin,0,SEEK_END);