这是代码
#include <stdio.h>
int main()
{
int num1 = 0, num2 = 0, num3 = 0, num4 = 0;
do
{
printf("choose 4 numbers, you dont need space\n");
scanf("%1d%1d%1d%1d", &num1, &num2, &num3, &num4);
if(!num1 || !num2 || !num3 || !num4)
{
getchar();
}
}
while (num1 != num2 || num1 != num3 || num1 != num4 ||
num2 != num3 || num2 != num4 || num3 != num4);
}
我不知道该怎么办。
例如,如果输入。
*/*-
然后输出为:
choose 4 numbers, you dont need space
choose 4 numbers, you dont need space
choose 4 numbers, you dont need space
choose 4 numbers, you dont need space
最佳答案
您的代码的行为与您描述的一样,因为在无法进行转换时,scanf
函数不会接触读取缓冲区。循环调用该函数将尝试读取下一个字符作为%d
。
输入非数字序列将永远不会停止代码。
因此,您应检查scanf
的返回值以检测错误的输入。
关于c - 为什么代码会打印出尽可能多的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53970433/