2014-09-12 74 views
-4

我想提示用户输入两个非负值。如果用户输入一个负值,程序会要求用户重新输入一个非负值。这是我的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; 
} 
+1

你在程序的开始包含了“#include ”吗?你需要这个才能访问printf和scanf。 – francis 2014-09-12 13:15:45

+2

你的问题是什么?你是否收到错误信息(如果有,是什么)?代码是否没有按照你的意图去做(如果是的话,它在做什么以及你期望的是什么)? – 2014-09-12 13:27:09

+0

没有错误消息乔。我的问题是,我想要求用户输入两个值,如果第一个<0重新提交,则比移动到下一个输入值直到两个输入均为正值。我的问题是....有没有什么办法使用do while循环来设置这段代码?或while循环 – cyerocks 2014-09-12 13:45:44

回答

2

即使有些人认为

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

是错误的,应改为:

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

。在C中为常规相邻字符串文字被自动连接。

尽管如此,没有必要使用那么多的"符号没有特别的用处。

+0

-1,这是错误的。相邻的字符串文字是自动连接的,这是基本的C. – unwind 2014-09-12 13:11:37

+0

这没有错,最好像这样写。 – Igor 2014-09-12 13:13:37

+2

这是错误的,因为它不是一个答案:你指出的改变不会帮助海报获得代码的工作。因此,被低估了。 – unwind 2014-09-12 13:15:42

1

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

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

感谢wizkid,肯定会帮助减少我的代码 – cyerocks 2014-09-12 13:28:34

2

您必须检查的scanf()返回值,除非它返回2,你不能依靠ab。两者都具有有效值

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

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

但是,这么说,它往往是更好地做到这一点两步

  1. 阅读完整的线路输入的来自用户的使用fgets()
  2. 尝试使用sscanf()从该单行扫描出两个数字。请注意在函数名称开头的附加s,在这里!

由于scanf()对空白处理有相当复杂的处理,因此上述内容更加健壮。

+0

那是我的问题在哪里抢我试图检查一个变量的返回值,如果它是负提示用户重新输入一个正值,并输入第二个整数和重复这个过程直到a和b都是正数。我对使用scanf函数仍然有点不满。我将如何能够检查返回值? – cyerocks 2014-09-12 13:34:33