如何检查用户输入是否不是C中的int值

时间:2017-01-07 21:40:08

标签: c loops int

我需要检查用户输入值是否不是int值。我已经尝试了我所知道的不同组合,但我得不到任何错误或随机错误

如果用户输入任何字符,则会发出警告信息

这就是我写的

#include <stdio.h> 

//C program to perform addition, subtraction, multiplication, division + - * / 

int main()   
{    
    int num1,num2;
    char alpha[30]

    printf("enter numbers:\n\n");

    printf("number 1: ");
    scanf("%d",&num1);

    printf("number 2: ");
    scanf("%d",&num2);

    // write a funcntion that when a char is entered to display an error 

    if (num1//and num2 == alpha)
        printf("error");


        else {

    printf("Rezultat: \n");

    printf("sborut im e: %d\n",num1+num2);
    printf("ralikata im e: %d\n",num1-num2);
    printf("proizvedenieto im e: %d\n",num1*num2);
    printf("ralikata im e: %d\n",num1/num2);

            }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

Scanf有一个返回值。

  

1-3)成功分配的接收参数数量(如果在分配第一个接收参数之前发生匹配失败,则可能为零),如果在第一次接收之前发生输入故障,则为EOF论证被分配了。

     

4-6)(1-3)相同,但如果存在运行时约束违规,也会返回EOF。

以下是使用该信息的示例程序:

#include <stdio.h> 
int main(int argc, char **argv) {
    int inputInteger;
    printf("Please provide some input.\n");
    if(scanf("%d", &inputInteger) == 1) {
        printf("You inputted an integer\n");
    } else {
        printf("You did not enter an integer\n");
    }
    return 0;
}

输出:

./a.out
1[Enter]
You inputted an integer

./a.out
hello[Enter]
You did not enter an integer.

注意:我觉得有必要告诉您scanf()不是获取输入的最佳方式。有关详细信息,请参阅this答案。

编辑:我将if(scanf("%d", &inputInteger))更改为if(scanf("%d", &inputInteger) == 1),以便EOF不会输出找到的整数(在评论中由chux指出)。

答案 1 :(得分:0)

try / catch方法有效,通过转换为int,编译器会捕获测试

std::string input;
std::getline(std::cin,input);
int input_value;
try {
  input_value=boost::lexical_cast<int>(input));
} catch(boost::bad_lexical_cast &) {
  // process bad input here
}