验证C程序的输入

时间:2010-08-11 06:45:51

标签: c validation

我有一个c程序,其中我接受2个数字作为输入。 如何验证输入的输入是否仅为数字而不是字符。

void main()
{
  int a,b;
  printf("Enter two numbers :");
  scanf("%d%d",&a,&b);
  printf("Number 1 is : %d \n Number 2 is : %d",a,b);
}

[编辑]添加了示例代码

2 个答案:

答案 0 :(得分:3)

除了其他有趣的建议(特别是scanf的建议),您可能还想使用isdigit函数:

  

isdigit()函数应该测试   c是否是一个类的字符   程序当前区域设置中的数字

请注意,此函数仅检查一个字符,而不是整个字符。

采用已经建成的功能总是好的做法;即使在最简单的任务中,你也可能没有意识到错综复杂,这将使你成为一个优秀的程序员。

当然,在适当的时候,您可能希望了解该功能如何有效地掌握基础逻辑。

答案 1 :(得分:2)

scanf返回已成功扫描的项目数。如果您要求两个带有%d%d的整数,并且scanf返回2,那么它会成功扫描这两个数字。任何小于2的数字表示scanf无法扫描两个数字。

int main()
{
    int a,b;
    int result;

    printf("Enter two numbers :");
    result = scanf("%d%d",&a,&b);

    if (result == 2)
    {
        printf("Number 1 is : %d \n Number 2 is : %d",a,b);
    }
    else if (result == 1)
    {
        // scanf only managed to scan something into "a", but not "b"
        printf("Number 1 is : %d \n Number 2 is invalid.\n", a);
    }
    else if (result == 0)
    {
        // scanf could not scan any number at all, both "a" and "b" are invalid.
        printf("scanf was not able to scan the input for numbers.");
    }
}

scanf可能返回的另一个值是EOF。如果从流中读取错误,它可能会返回此信息。

另请注意,main会返回int,但您会在void返回时声明它。