当输入是字符时,下面的简单程序将给出无限循环,尽管它意味着区分字符和数字。如何测试是否scanf
使用返回值获取应该是数字的字符scanf
?
#include <stdio.h>
int main() {
int n;
int return_value = 0;
while (!return_value) {
printf("Input a digit:");
return_value = scanf("%d", &n);
}
printf("Your input is %d\n", n);
return 0;
}
As Joachim在他的回答中指出,这个角色不会被scanf
在这里并存在于缓冲区中,在下一次迭代中scanf
再次读取相同的字符并再次将其保留到缓冲区,依此类推。这会导致无限循环。
您需要在下一次迭代之前消耗这个角色。只需放置一个getchar()
行后return_value = scanf("%d", &n);
return_value = scanf("%d", &n);
while(getchar() != '\n'); // will consume the charater
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)