【问题标题】:for loop accepts one extra value than the loop conditionfor 循环接受比循环条件多一个值
【发布时间】:2019-04-14 10:09:12
【问题描述】:

我编写了一个程序,它接受来自用户的值,然后在 for 循环中迭代该值。在 for 循环中,我接受要存储在数组中的数字。 我的问题是 for 循环接受一个比用户指定的额外值。

int main()
{
  int  i = 0;
  int  a;
  int no_of_boxcars = 0;
  double array[10];
  double boxcart_wt = 0;
  //printf("Enter the no of wagons");
  scanf_s("%d", &no_of_boxcars);        // no of boxcars
  for (i = 0; i<=no_of_boxcars;++i)
  {
    printf("%d \t", i);
    scanf_s("%lf ", &boxcart_wt);   //weight in boxcar

    array[i] = boxcart_wt;
  }
}

如果用户输入 3,它应该接受 3 个值

for (i = 0; i<no_of_boxcars;++i)
{
  //but here accepts 4 values
}

如果用户输入 3,它应该接受 4 个值

for (i = 0; i<=no_of_boxcars;++i)
{
  //and here accepts 5 values
}

【问题讨论】:

  • "一个额外的值":&lt;&lt;= 不同。
  • 对于no_of_boxcars 等于3,这个循环for (i = 0; i &lt; no_of_boxcars; ++i) { ...} 正好重复三次。
  • @xing,谢谢你是对的,这就是问题所在。我现在工作
  • @alk,是的,你是对的,它们不一样,但我的问题是我的循环接受了一个超出预期的额外值。因此,如果我从“%lf”中删除尾随空格,那么它的工作就完美了。

标签: c arrays for-loop scanf


【解决方案1】:

C 中的索引来自0..n-1。在您的 for 循环中,您从 0..n 开始,这太多了。改变

for (i = 0; i<=no_of_boxcars;++i)

for (i = 0; i<no_of_boxcars;++i)

【讨论】:

  • 问题不在于for循环,当我接受for循环内的值时,它在%lf之后有一个“%lf”空格。所以删除这个空间后,它工作正常
  • @AmeyaPatil,您的问题也在循环测试中,并且问题的标题是这样的......现在不要说这个问题没有解决这个问题。此答案中指示的错误也是一个错误。很遗憾,您拒绝了 Paul 的回答……正如您明确表示的那样,您的程序要求一个额外的值。
  • @LuisColorado ,我接受我的错误,但给出的案例清楚地说明了问题所在。
  • @PaulOgilvie,您的回答在某种意义上解决了这个问题,但问题比这提前了一步。我也尊重你的回答。
【解决方案2】:

scanf 格式的空格匹配 任何 个空格,以及任意数量的连续空格。

尾随空格的问题是scanf 必须继续读取,直到它读取到不是空格的内容,否则它不知道空格何时结束。

这导致您需要提供一些额外的非空白输入的问题。

对于除两种格式("%c""%[")之外的所有格式,scanf 函数会自动读取并丢弃前导空格。所以通常不需要在格式字符串中包含空格。除了不跳过空格的那两种格式。

阅读例如this scanf (and family) reference 了解更多详情。

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2018-06-26
    • 1970-01-01
    • 2016-04-10
    • 2013-05-27
    相关资源
    最近更新 更多