#c #arrays #for-loop #scanf
#c #массивы #for-цикл #сканф
Вопрос:
Я написал программу, которая принимает значение от пользователя, а затем выполняет итерацию по этому значению в цикле 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", amp;no_of_boxcars); // no of boxcars
for (i = 0; i<=no_of_boxcars; i)
{
printf("%d t", i);
scanf_s("%lf ", amp;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
}
Комментарии:
1. » одно дополнительное значение «:
<
не совпадает с<=
.2. Для
no_of_boxcars
того, чтобы быть равным3
, этот циклfor (i = 0; i < no_of_boxcars; i) { ...}
повторяется ровно три раза.3. @xing, спасибо, вы правы, это была проблема. теперь я работаю
4. @alk, да, вы правы, они не совпадают, но мой вопрос заключался в том, что мой цикл принимал одно дополнительное значение, чем ожидалось. Поэтому, если я удалю пробел в конце из «%lf», тогда он будет работать идеально.
Ответ №1:
Индексы в C идут от 0..n-1
. В вашем цикле for вы переходите из 0..n
, и это слишком много. Изменить
for (i = 0; i<=no_of_boxcars; i)
Для
for (i = 0; i<no_of_boxcars; i)
Комментарии:
1. проблема не в цикле for, а в том, что когда я принимаю значение внутри цикла for, у него есть пробел «%lf » после %lf . итак, после удаления этого пробела он работал нормально
2. @AmeyaPatil, ваша проблема также была в циклическом тестировании, и вопрос озаглавлен как таковой … не говорите сейчас, что проблема не рассматривается в этом ответе. Ошибка, о которой сообщается в этом ответе, также является ошибкой. Жаль, что вы отказываетесь от ответа Пола … поскольку вы ясно заявили, что ваша программа запрашивала одно дополнительное значение.
3. @LuisColorado, я принимаю свою ошибку, но в приведенных случаях четко указано, в чем заключалась проблема.
4. @PaulOgilvie, ваш ответ в некотором смысле касался вопроса, но проблема была на шаг впереди этого. Я тоже уважаю ваш ответ.
Ответ №2:
Пробел в scanf
формате соответствует любому пробелу и любому количеству последовательных пробелов.
Проблема с конечным пробелом заключается в том, что then scanf
должен продолжать чтение, пока не прочитает что-то, что не является пробелом, иначе он не знает, когда заканчиваются пробелы.
Это приводит к проблеме, заключающейся в том, что вам нужно ввести дополнительные данные, не содержащие пробелов.
Для всех форматов, кроме двух ( "%c"
и "%["
) scanf
, функция автоматически считывает и отбрасывает начальные пробелы. Поэтому обычно не требуется включать пробелы в строку формата. За исключением, возможно, тех двух форматов, которые не пропускают пробелы.
Прочитайте, например, эту scanf
(и семейную) ссылку для получения более подробной информации.