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

如何在C中检查用户输入是否不是int值,c,loops,int,C,Loops,Int,我需要检查用户输入值是否不是int值。我尝试了我所知道的不同组合,但我要么一无所获,要么随机出错 如果用户输入任何字符,它将发出警告消息 这是我写的 #include <stdio.h> //C program to perform addition, subtraction, multiplication, division + - * / int main() { int num1,num2; char alpha[30] prin

我需要检查用户输入值是否不是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;
}
#包括
//执行加法、减法、乘法、除法+-*/
int main()
{    
int num1,num2;
字符alpha[30]
printf(“输入数字:\n\n”);
printf(“数字1:”);
scanf(“%d”&num1);
printf(“数字2:”);
scanf(“%d”&num2);
//编写一个函数,在输入字符时显示错误
if(num1//和num2==alpha)
printf(“错误”);
否则{
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);
}
返回0;
}
有一个返回值是有原因的

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;
}
注意:我觉得有义务通知您,
scanf()
不是获取输入的最佳方式。有关更多详细信息,请参阅答案

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

有返回值是有原因的

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;
}
注意:我觉得有义务通知您,
scanf()
不是获取输入的最佳方式。有关更多详细信息,请参阅答案


编辑:我将
if(scanf(“%d”,&inputInteger))
更改为
if(scanf(“%d”,&inputInteger)==1)
,这样
EOF
就不会输出找到的整数(在注释中由指出)。

一种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
}
std::字符串输入;
std::getline(std::cin,输入);
int输入_值;
试一试{
输入值=boost::词法转换(输入));
}捕获(boost::错误的\u词法\u cast&){
//在这里处理错误的输入
}

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
}
std::字符串输入;
std::getline(std::cin,输入);
int输入_值;
试一试{
输入值=boost::词法转换(输入));
}捕获(boost::错误的\u词法\u cast&){
//在这里处理错误的输入
}


您必须使用
try catch
来处理错误选择代码。单击代码按钮
{}
以正确格式化代码。@Mohsen_Fatemi-在“C”
scanf
中没有“try catch”返回成功转换的次数。您请求一次转换,因此返回值应为1。可能重复:您必须使用
try catch
来处理错误选择代码。单击代码按钮
{}
以正确格式化代码。@Mohsen_Fatemi-在“C”
scanf
中没有“try catch”返回成功转换的次数。您请求一个转换,所以返回值应该是1。可能重复:好的,但是如果(scanf(“%d”,&num1)(它们之间的内容)scanf(“%d”,&num2){printf(“stuff…”),如何检查像我这样的两个scanf呢@Toni03m只需在
if
语句中使用
&
运算符。如果您不知道如何操作,我建议您阅读。注意
stdin
关闭时(文件末尾),
scanf(“%d”和&inputineger)
返回
EOF
,然后将
printf(“您输入了一个整数”)
。最好使用
if(scanf(“%d”)、&inputInteger)==1
@chux编辑。谢谢,我没听清楚。我输入了
4.5
,它仍然有效。它只是将值设置为
4
。好的,但是如何检查两个scanf(scanf(“%d”、&num1)(它们之间的间隔是什么)scanf(“%d”、&num2){printf(“东西…”)@Toni03m只需在
if
语句中使用
&
运算符。如果您不知道如何操作,我建议您阅读。注意
stdin
关闭时(文件末尾),
scanf(“%d”和&inputineger)
返回
EOF
,然后将
printf(“您输入了一个整数”)
。最好使用
if(scanf(“%d”)和
@chux-Edited。谢谢,我没听清楚。我输入了
4.5
,它仍然有效。它只是将值设置为
4
。我们是在为C语言说话我们是在为C语言说话