如何检查用户的输入值是否为负值并最终要求用户再次插入?

时间:2014-09-12 13:07:50

标签: c loops while-loop operators

我试图提示用户输入两个非负值。如果用户输入负值,程序会要求用户重新输入非负值。这是我的C程序到目前为止的样子,请解释我是否误用了运算符。

int main()
{    
    int a,b;
    do {
        printf("enter two positive integers\n");
        scanf("%d""%d", &a, &b);
    } while (a<0 || b<0);

    printf("thank you");

    return 0;
}   

3 个答案:

答案 0 :(得分:2)

即使有些人认为

 scanf("%d""%d", &a, &b);

错误,应更改为:

scanf("%d %d", &a, &b);

不是。 C中常规相邻字符串文字会自动连接。

然而,没有必要使用那么多"符号作为特殊用途。

答案 1 :(得分:2)

您必须检查scanf()的返回值。除非它返回2,否则您无法依赖ab都具有有效值。

检查scanf()的返回值可以直接完成,例如你可以:

if(scanf("%d %d", &a, &b) == 2)
{
  if(a >=0 && b >= 0)
    break;
}

但是,也就是说,通过两步来做这件事往往更好:

  1. 使用fgets()
  2. 阅读用户的完整输入
  3. 尝试使用sscanf()扫描该单行中的两个数字。请注意函数名称开头的附加s,此处为!
  4. 上面的内容使其更加健壮,因为scanf()对空格的处理相当复杂。

答案 2 :(得分:1)

除非你的scanf中有一个额外的\“它看起来很好。它应该是:

scanf("%d %d", &a, &b);