цикл for принимает одно дополнительное значение, чем условие цикла - PullRequest
1 голос
/ 14 апреля 2019

Я написал программу, которая принимает значение от пользователя и затем перебирает это значение в цикле 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
}

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Индексы в C идут от 0..n-1. В вашем цикле for вы переходите от 0..n, и это слишком много. Изменение

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

до

for (i = 0; i<no_of_boxcars;++i)
0 голосов
/ 14 апреля 2019

Пробел в формате scanf соответствует любому пробелу и любому количеству последовательных пробелов.

Проблема с завершающим пробелом заключается в том, что тогда scanf должен продолжить чтение, пока не прочитает что-то, что не пробел, в противном случае он не знает, когда пробелы заканчиваются.

Это приводит к проблеме, в которой вам нужно дать дополнительный ввод без пробелов.

Для всех форматов, кроме двух ("%c" и "%["), функция scanf автоматически считывает и отбрасывает начальные пробелы. Поэтому обычно нет необходимости включать пробелы в строку формата. За исключением, возможно, тех двух форматов, которые не пропускают пробелы.

Прочитайте, например, это scanf (и семейство) ссылка для более подробной информации.

...