如何检查特定数据类型的输入?

时间:2018-08-28 16:43:34

标签: c

我非常,我的意思是C编程的开始,但是我有一个问题使我无法继续前进。

我在C语言中添加了两个数字程序,并且使用了以下代码:

# include <stdio.h>
int main()
{
    int a,b,c;

    printf("Enter no. 1 \n");
    scanf("%d",&a);

    printf("Enter no. 2 \n");
    scanf("%d",&b);

    {
        c=a+b;
    }
    printf("The sum is %d\n", c);

    return (0);
}

现在,当我运行带有少量输入的程序时,它运行得很好。 但是当我输入一个字符串时,它会发出类似这样的声音。

Output addition_int

任何人都可以告诉我如何检查获得的输入是否为整数并将其添加为参数。一个可能的其他陈述吗? 预先感谢

2 个答案:

答案 0 :(得分:1)

您应该使用scanf的返回值。

  

int std :: scanf(const char * format,...);

     

返回值

     

成功分配的接收参数数量。

     

---来自cppreference

完整代码:

# include <stdio.h>
int main()
{
    int a, b, c;

    printf("Enter no. 1 \n");
    while(scanf("%d", &a) != 1)
        getchar();

    printf("Enter no. 2 \n");
    while(scanf("%d", &b) != 1)
        getchar();

    c = a + b;
    printf("The sum is %d\n", c);
    return 0;
}

因此,当scanf无法读取小数时,它将返回0。因此,我们需要使用getchar来删除非十进制字符,并继续接收十进制输入。

您获得的奇怪的c值是因为失败的scanf,它将使a值保持未分配状态,因此它将是一些垃圾值。

答案 1 :(得分:0)

  

如何检查特定数据类型的输入?
  ...当我输入一个字符串时,它会发出类似这样的信息。 ...
  如何检查获得的输入是否为整数...

用户输入不是字符串,也不是整数,也不是某些特定类型。用户输入的是 text (一个字符序列),包括诸如'\n'之类的控制代码。 scanf()接受此文本并将其转换。

scanf()的转换方式取决于 format 字符串。

scanf("%d",&a);将尝试使用输入文本并将其转换为int并将该值保存到&a所指向的位置。如果输入的文本不符合预期的顺序,例如可选空格 + 可选符号 + 数字,则输入将保留在{{1 }},以进行下一个输入操作。

代码可以通过返回值stdin来检测转换成功,该返回值通常是完成转换的次数。

scanf()

如果文本输入对int completed_conversions = scanf("%d",&a); if (completed_conversions == 1) { puts("An `int` was read"); } else if (completed_conversions == 0) { puts("Non numerical input detected, nothing read, `a` unchanged"); } else if (completed_conversions == EOF) { puts("End-of-file or rare input error occurred"); } 没有意义,该怎么办?也许扔掉所有输入,直到行尾(或文件结尾),然后重试。

int