题目内容:
从键盘任意输入两个符号各异的整数,直到输入的两个整数满足要求为止,然后打印这两个数。
代码是从一个帖子下的回复找的@Cruel_Summer
但是我还是不太明白 为什么这里要清除缓冲区啊(悲) 什么情况下需要清除啊(哭)
#include
int main()
{
int x1, x2, check;
printf("Input x1, x2:\n");
check = scanf("%d,%d",&x1,&x2);
while((check != 2) || (x1 * x2 >= 0 ))
{
while (getchar() != '\n');
check = scanf("%d,%d",&x1,&x2);
printf("Input x1, x2:\n");
}
printf("x1=%d,x2=%d\n",x1,x2);
return 0;
}
当用户输入的数据不符合预期时,scanf()函数会将剩余的输入留在缓冲区里,下一次调用scanf()函数时会直接从缓冲区里读取数据。而在这个代码里,如果输入的两个数字x1和x2相乘大于等于零,或者scanf()函数返回的值不为2,就说明输入的数据不符合预期。在这种情况下,为了防止缓冲区里的数据影响下一次输入,需要使用getchar()函数来清除缓冲区里的数据。
仅供参考,望采纳,谢谢。
其实跟你清除缓冲区之前干了什么关系不大
主要看你后续要干什么
因为你在控制台里输入是分行的,这过程中难免会键入多余的回车(换行符)
如果你后续的操作不能自动忽略换行符而取得数据,就必须把多余的字符读出来丢掉才行
而%d显然是能够自动忽略换行的,这里其实根本用不着清除缓冲区