整数验证在C ++上

时间:2011-10-11 21:06:51

标签: c integer

我编写了小型C ++控制台应用程序,这是源代码:

#include<stdio.h>
#include<locale.h>
#include<ctype.h>
#include<stdlib.h>

void main()
{
    setlocale(LC_ALL, "turkish");
    int a,b,c,d;

    printf("first number: ");
    scanf("%d", &a);

    printf("second number: ");
    scanf("%d", &b);

    c = a+b;

    printf("Sum: : %d\n", c);
}

正如您所看到的,我正在向用户请求两个号码而不是总结它们。但我想添加一个控件来检查用户enterede的数字是整数吗?

我将检查用户键入的数字,如果数字不是真正的整数,我将回显错误。我在scanf之后使用它,但效果不好。

if(!isdigit(a))
{
            printf("Invalid Char !");
            exit(1);
}

很快,在scanf操作中,如果用户键入“a”,它将产生错误消息并且程序停止工作。如果用户键入数字程序将继续

3 个答案:

答案 0 :(得分:7)

scanf为您做验证。只需检查scanf的返回值。

printf("first number: ");
if(scanf("%d", &a) != 1) {
  printf("Bad input\n");
  return 1;
}

printf("second number: ");
if(scanf("%d", &b) != 1) {
  printf("Bad input\n");
  return 1;
}

答案 1 :(得分:2)

C ++的方法是

#include <iostream>
#include <locale>

int main()
{
    std::locale::global(std::locale("nl_NL.utf8")); // tr_TR doesn't exist on my system

    std::cout << "first number: ";

    int a;
    if (!(std::cin >> a))
    {
        std::cerr << "whoops" << std::endl;
        return 255;
    }

    std::cout << "second number: ";

    int b;
    if (!(std::cin >> b))
    {
        std::cerr << "whoops" << std::endl;
        return 255;
    }

    int c = a+b;

    std::cout << "Sum: " <<  c << std::endl;

    return 0;
}

答案 2 :(得分:1)

isdigitchar为参数。

如果对scanf的调用成功,则可以保证您有一个整数。

scanf也有一个返回值,表示它已经读取了多少个值。

在这种情况下,您想检查scanf的返回值是否为1。

请参阅:http://www.cplusplus.com/reference/clibrary/cstdio/scanf/