for循环接受一个比循环条件多的值

问题描述 投票:1回答:2

我编写了一个程序,它接受来自用户的值,然后在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
}
c arrays for-loop scanf
2个回答
0
投票

scanf格式的空格匹配任何空白区域和任意数量的连续空白区域。

尾随空间的问题是,然后scanf必须继续读取,直到它读取不是空白的东西,否则它不知道空格何时结束。

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

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

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


1
投票

C中的索引来自0..n-1。在你的for循环中,你来自0..n,这太多了。更改

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

for (i = 0; i<no_of_boxcars;++i)
© www.soinside.com 2019 - 2024. All rights reserved.