关于scanf 输入数据与接收数据类型不同时产生的问题
我用一个int型的变量去接收一个数据,接收格式设置为%d。我的环境为vs2013程序代码:
#define _CRT_SECURE_NO_DEPRECATE # include <stdio.h> #include<stdlib.h> #define see system("pause") void main() { int i=0; int n = 12;//循环次数 while (n--){ scanf("%d",&i); printf("i=%d\n", i); } see; }当我正常输入数字时是正常的,当我输入一个数字,显示一个数字。
但是当我输入的数据不是数字的时候,比如“w”,就成了无限输出上一个正确的数字,而不再提供输入(scanf失效),请问这是为什么?
我猜测可能是输入数据流的问题,所以我就刷新了一下输入数据流
程序代码:
#define _CRT_SECURE_NO_DEPRECATE # include <stdio.h> #include<stdlib.h> #define see system("pause") void main() { int i=0; int n = 12; while (n--){ scanf("%d",&i); printf("i=%d\n", i); fflush(stdin); } see; }此时,scanf有效,提供输入口,但是如果你输入的是非数字,比如“w”,它还是不能读入w,输出原有最后一次的正确数。
请问这是什么原因,scanf对格式错误的数据的处理方式是什么?