首页 > 解决方案 > 为什么代码打印与获取字符一样多

问题描述

这是代码

#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

标签: c

解决方案


您的代码的行为与您描述的一样,因为scanf当无法进行转换时,该函数不会触及读取缓冲区。在循环中调用函数将尝试将下一个字符读取为%d.

输入非数字序列永远不会按预期停止您的代码。因此,您应该检查 的返回值scanf以检测错误输入。


推荐阅读