我编写了一个程序,它接受来自用户的值,然后在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
}
scanf
格式的空格匹配任何空白区域和任意数量的连续空白区域。
尾随空间的问题是,然后scanf
必须继续读取,直到它读取不是空白的东西,否则它不知道空格何时结束。
这导致您需要提供一些额外的非空白输入的问题。
对于除两种格式之外的所有格式("%c"
和"%["
),scanf
函数会自动读取并丢弃前导空白区域。因此通常不需要在格式字符串中包含空格。除了那两种不跳过空格的格式之外。
阅读例如this scanf
(and family) reference了解更多详情。
C中的索引来自0..n-1
。在你的for循环中,你来自0..n
,这太多了。更改
for (i = 0; i<=no_of_boxcars;++i)
至
for (i = 0; i<no_of_boxcars;++i)