scanf的返回值是输入的值有效的个数,如果输入的类型不对会产生类似于缓存,如果不进行处理,则会自动将该缓存带入下一个scanf中,需要增加rewind(stdin);来进行处理。
int n;
scanf("%d", &n); 如果输入的是int,则返回1;如果输入的不是数字,则返回0
此处输入的不是int类型,所以会返回0,此时 while的条件变为 0 != 1 为真,则进入循环,循环内没有对缓存进行处理,下次进入scanf还是拿到的上次的错误的缓存所得值就还是0,就继续进入循环,如此就变成了死循环了,在循环中增加 rewind(stdin); 来解决该问题。
如有帮助,请采纳!
这个while的判断条件并不直接是n的值,而是看scanf这个函数的返回值是多少。
这里n是int类型,那么对于scanf这个函数,只有当你输入的是整数的时候,才会返回1,退出循环
至于输入非int类型,就要看scanf函数怎么返回结果了,希望能帮到你