我需要检查用户输入值是否不是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;
}
答案 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
}