【问题标题】:Language-C, while-loop, error for wrong input语言-C,while循环,错误输入错误
【发布时间】:2020-11-08 22:46:21
【问题描述】:

我真的希望你能帮我解决这个问题。 所以这只是我的代码的一部分,它不是。 您在下面看到的部分无法按预期工作。 所以剩余工资的输出也是正确的,但是如果输入超出给定的范围(无论是数字还是字母)它不会输出错误,因为id不会重复问题。

int main()
{
  int variable1 = 0;
  double variable2 = 0;
  double variable3 = 0;
  double variable4 = 0;
  char variable5 = 0;

  printf("Type in a number:\n");
  scanf("%d", &variable1);

  while((variable1<0) || (variable1>5000000))
  {
    printf("Error\n");

    if((variable1>0) && (variable1<=5000000))
    {
      printf("Question that requires the answer y/Y or n/N?:\n");
      scanf(" %c", &variable5);
    }
   return 0;
  }

  variable2 = Function1(variable1, variable2);
  variable3 = Function2(variable1, variable2, variable3);
  variable4 = Function3(variable3, variable4, variable5);

  while((variable5!='j') || (variable5!='J') || ((variable5!='n') || (variable5!='N' )))
  {
    printf("Error\n");
    break;
    if((variable5=='j') || (variable5=='J') || ((variable5=='n') || (variable5=='N' )))
    return 0;
      if((variable1>0) && (variable1<=5000000))
    {  
      printf("Output1:\t\t\t\t\t\t\t\t%12.2d\n", variable1);
      printf("Function1:\t\t\t%12.2lf\n", variable2);
      printf("Function2:\t%12.2lf\n" , variable3 + variable4);
      printf("Function3:\t\t\t\t\t\t\t%12.2lf\n" , variable1+ variable2+ variable3 + variable4);
      return 0;
    }
  }
}

【问题讨论】:

  • 从您发布的代码中,请删除所有无关紧要的内容,直到您最终得到几行不符合您期望的代码。这就是 StackOverflow 的工作方式;我们不想用无关紧要的事情打扰我们询问的人。有道理,对吧?
  • 这只是我的代码的一部分(主要功能)。当输入超出范围的数字或字母时,它不会输出错误。
  • 好吧,通过删除行/代码来放大问题。然后在这里展示你剩下的东西并解释。使用printf() 语句或调试器来查看您的程序做了什么。你不能指望其他人分析你的代码,给出一个模糊的描述,说它没有按照你的期望做。你需要自己解决这个问题;我知道一开始可能会很痛苦,但这是工作的一部分。不要误会我的意思,一旦您将问题归结为明确定义的问题,我很乐意提供帮助。
  • 'variable1' 等.....使用有意义的名称,否则您的代码很难理解:(

标签: c loops


【解决方案1】:
while((variable1<0) || (variable1>5000000))
{
  printf("Error\n");

  if((variable1>0) && (variable1<=5000000))
  {
    printf("Question that requeires the answer y/Y or n/N?:\n");
    scanf(" %c", &variable5);
  }
 return 0;
}

在第一个 while 循环中,删除 if((variable1&gt;0) &amp;&amp; (variable1&lt;=5000000))。该条件与预期的相反,并且没有必要进行测试,因为循环只是测试了该值是否无效。这就解释了为什么问题提示不重复。

【讨论】:

  • 也许会提到这个循环中的任何内容都不会改变variable1,所以即使在条件修复后它仍然不起作用(而不是没有被输入将是无限的)。此外,此答案中未提及的第二个 while 循环 while((variable5!='j') || (variable5!='J')... 也是完全错误的。该 while 表达式中的所有 || 条件都应该是 &amp;&amp;
  • @WhozCraig 你是对的,循环中没有任何东西改变变量1。除此之外,循环中有一个return 0 语句,并且变量名称是非描述性的,所以我不确定作者的意图。无论如何,这段代码中有很多可以修复的地方。
【解决方案2】:

这段代码等价于下面的代码。

int main()
{
  int variable1 = 0;
  double variable2 = 0;
  double variable3 = 0;
  double variable4 = 0;
  char variable5 = 0;

  printf("Type in a number:\n");
  scanf("%d", &variable1);

  while((variable1<0) || (variable1>5000000))
  {
    printf("Error\n");
    return 0;
  }

  variable2 = Function1(variable1, variable2);
  variable3 = Function2(variable1, variable2, variable3);
  variable4 = Function3(variable3, variable4, variable5);

  while((variable5!='j') || (variable5!='J') || ((variable5!='n') || (variable5!='N' )))
  {
    printf("Error\n");
    break;
  }
}

并且上面的代码等价于下面的代码。

int main()
{
  int variable1 = 0;

  printf("Type in a number:\n");
  scanf("%d", &variable1);

  if((variable1<0) || (variable1>5000000))
  {
    printf("Error\n");
    return 0;
  }

  printf("Error\n");
}

【讨论】:

    猜你喜欢
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2023-04-10
    • 2017-04-03
    • 1970-01-01
    相关资源
    最近更新 更多