#include <stdio.h>
int main()
{
char another;
int num;
do
{
printf("enter the number");
scanf("%d", &num);
printf("square of%d is %d\n", num, num * num);
printf("want to check another number y/n");
fflush(stdin);
scanf("%c", &another);
} while (another == 'y');
return 0;
}
在上面的代码中,第二个scanf()
没有被执行,因此控制台不接受输入。
答案 0 :(得分:3)
根据标准,刷新stdin
为undefined behaviour。有关详细信息,请参阅Using fflush(stdin)
。
答案 1 :(得分:2)
当您为第一个scanf输入一个数字时,它后面跟着一个换行符。 %d仅取整数值,换行符仍保留在输入缓冲区中。因此,随后的scanf最终消耗了该字符,并且您的循环因另一个==&#39; y&#39;而终止。是假的。 (另一个有&#39; \ n&#39;)。
以下是解决问题的方法之一。使用%c和%d来捕获换行符并忽略它。
#include<stdio.h>
int main()
{
char another, nl;
int num;
do
{
printf("enter the number");
scanf("%d%c",&num,&nl);
printf("square of%d is %d\n",num,num*num);
printf("want to check another number y/n: ");
//fflush(stdin);
scanf("%c",&another);
printf("%c", another);
}while (another=='y');
return 0;
}
答案 2 :(得分:0)
scanf之前输入char的原因不起作用 删除fflush并为&lt;&lt;&lt;&#&gt;%c&#34;&gt;&gt;添加空格 像这样:scanf(&#34;%c&#34;,&amp; another);
#include<stdio.h>
int main(){
char another;
int num;
do
{
printf("enter the number ");
scanf("%d",&num);
printf("square of %d is %d\n",num,num*num);
printf("want to check another number y/n ");
scanf(" %c",&another);
}while (another=='y');
return 0;
}
这很棒
答案 3 :(得分:0)
如果添加语句
fseek(stdin, 0, SEEK_END);
它会将stdin指针移动到文件的末尾,因此将省略任何额外的字符。然后写第二个scanf。我的意思是:
#include<stdio.h>
int main()
{
char another, nl;
int num;
do
{
printf("enter the number");
scanf("%d%c",&num,&nl);
fseek(stdin, 0, SEEK_END);
printf("square of%d is %d\n",num,num*num);
printf("want to check another number y/n: ");
//fflush(stdin);
scanf("%c",&another);
fseek(stdin, 0, SEEK_END);
printf("%c", another);
}while (another=='y');
return 0;
}
答案 4 :(得分:-1)
首先fflush;刷新流的输出缓冲区,所以你不应该在这里使用它。第二个scanf无法工作的原因是因为您正在尝试读取1位字符,在这种情况下,在第二个printf语句之后总是得到\ 0的值。希望这有帮助。