【问题标题】:How to check if user input is not an int value in C如何检查用户输入是否不是C中的int值
【发布时间】:2017-05-22 11:10:14
【问题描述】:

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

【问题讨论】:

  • 你必须使用try catch来处理错误
  • 选择代码。单击代码按钮 {} 以正确格式化代码。
  • @Mohsen_Fatemi - “C”中没有“try catch”
  • scanf 返回成功转化的次数。您请求一次转化,因此返回值应为 1。

标签: c loops int


【解决方案1】:

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", &amp;inputInteger)) 更改为if(scanf("%d", &amp;inputInteger) == 1),以便EOF 不会输出找到整数(由cmets 中的chux 指出)。

【讨论】:

  • 好的,但是如何像我的情况一样检查两个 scanf if (scanf("%d",&num1)( 它们之间的内容) scanf("%d",&num2){ printf("东西...") }
  • @Toni03m 只需在if 语句中使用&amp;&amp; 运算符。如果您不知道该怎么做,我建议您阅读a basic book on C
  • 注意stdin 何时关闭(文件结束),scanf("%d", &amp;inputInteger) 返回EOF,然后将printf("You inputted an integer\n");。最好使用if(scanf("%d", &amp;inputInteger) == 1)
  • @chux 已编辑。谢谢,我没听懂。
  • 我输入了4.5,它仍然有效。它只是将值设置为4
【解决方案2】:

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
}

【讨论】:

  • 我们正在讨论 C 语言
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2014-08-08
  • 1970-01-01
相关资源
最近更新 更多