【问题标题】:How can I check if the user's input values are negative and eventually ask the user to insert them again? [closed]如何检查用户的输入值是否为负并最终要求用户再次插入? [关闭]
【发布时间】:2014-09-12 13:07:50
【问题描述】:

我正在尝试提示用户输入两个非负值。如果用户输入一个负值,程序会要求用户重新输入一个非负值。到目前为止,这是我的 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;
}   

【问题讨论】:

  • 您是否在程序的开头添加了#include &lt;stdio.h&gt;?你需要这个来访问 printf 和 scanf。
  • 您的问题是什么?您是否收到错误消息(如果是,它是什么)?代码是否没有按照您的意愿执行(如果是,它在做什么以及您的预期是什么)?
  • 没有错误信息乔。我的问题是我想要求用户输入两个值,如果第一个是
  • 是的,弗朗西斯我包含了我刚刚忘记包含在我的帖子中的那段代码

标签: c loops while-loop operators


【解决方案1】:

虽然有些人认为

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

错了,应该改成:

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

不是。它在 C 中是regular相邻的字符串文字会自动连接。

尽管如此,没有必要使用那么多" 符号,没有特殊用途。

【讨论】:

  • -1,这是错误的。相邻的字符串文字会自动连接,这是基本的 C.
  • 没有错,这样写比较好。
  • 这是错误的,因为它不是答案:您指出的更改将无助于发布者使代码正常工作。因此,投反对票。
  • unwind 你是说每个变量都必须有自己的字符串来检查每个值并报告用户是否必须重新输入一个整数或进入程序的下一部分?我正在尝试减少我的代码,这对于程序的这一部分是不可能的吗?
【解决方案2】:

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

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

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

但是,话虽如此,通常最好分两步进行

  1. 使用fgets()读取用户输入的完整行。
  2. 尝试使用sscanf() 扫描出该单行中的两个数字。请注意函数名称开头的附加s

以上内容使其更加健壮,因为scanf() 对空格的处理相当复杂。

【讨论】:

  • 这就是我的问题所在 rob 我正在尝试检查一个变量的返回值,如果它为负值,则提示用户重新输入一个正值,然后输入第二个整数并重复该过程直到a 和 b 都是正数。我对 scanf 功能的使用仍然有点不确定。我将如何检查返回值?
【解决方案3】:

它看起来不错,只是你的 scanf 中有一个额外的 \"。它应该是:

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

【讨论】:

  • 感谢wizkid,这肯定有助于减少我的代码
猜你喜欢
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2020-12-08
相关资源
最近更新 更多