scanf循环输入带来的问题:
#include<stdlib.h>
#include<stdio.h>
int main(int argc, char* argv[])
{
int ival;
float fval;
double dval;
while (1)
{
scanf("%d%f%lf", &ival, &fval, &dval);
printf("%d %f %lf \n", ival, fval, dval);
}
system("pause");
return 0;
}
运行结果:
123 4.56 7.89001 //第一次输入
123 4.560000 7.890010 //第一次输出
345 aaa 3.4456 //第二次输入
345 4.560000 7.890010//循环输出
345 4.560000 7.890010//循环输出
345 4.560000 7.890010//循环输出
345 4.560000 7.890010//循环输出
345 4.560000 7.890010
.....................
因为aaa的一次错误输入,Scanf不能正常完成循环输入,prinf一直循环输出,为保证循环正常进行每次输入前添加“fflush(stdin);”以清除scanf输入缓冲区:
#include<stdlib.h>
#include<stdio.h>
int main(int argc, char* argv[])
{
int ival;
float fval;
double dval;
while (1)
{
fflush(stdin); //清除缓存区
scanf("%d%f%lf", &ival, &fval, &dval);
printf("%d %f %lf \n", ival, fval, dval);
}
system("pause");
return 0;
}
运行结果:
123 4.56 7.89001 //第一次输入
123 4.560000 7.890010//第一次输出
345 aaa 3.4456 //第二次输入
345 4.560000 7.890010//第二次输出
111 2.22 3.33333 //第三次输入
111 2.220000 3.333330//第三次输出
。。。。。。。。。 //第四次输入
111 2.220000 3.333330//第四次输入
//循环恢复正常
直接将其添加至while循环中:
#include<stdlib.h>
#include<stdio.h>
int main(int argc, char* argv[])
{
int ival;
float fval;
double dval;
while (fflush(stdin), set = scanf("%d%f%lf", &ival, &fval, &dval) != EOF)
{
printf("%d %f %lf \n", ival, fval, dval);
}
system("pause");
return 0;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。