Почему моя программа принимает одно целое слишком много и вводит слишком мало?

Я хотел бы понять, почему программа позволяет мне вводить 3 целых числа, когда я определил SIZE как 2. И когда он возвращает массив, он возвращает только два числа NOT, которые я ввел. Спасибо за вашу помощь.

//C How to Program Exercises 2.23 #include  #include  #define SIZE 2 int main (void){ int myArray[SIZE]; int count; printf("Please enter 5 integers\n"); for (count=1;count<=SIZE;count++){ scanf("%d\n",&myArray[count]); } for (count=1;count<=SIZE;count++){ printf("The values of myArray are %d\n",myArray[count]); } getch(); return 0; } 

Ваши петли должны быть

 for (count=0;count 

Индексация массива равна 0 на C.

Поскольку у вас есть вызов whitespace chatacter ( \n ) в вызове scanf() , он ждет ввода небелосового символа для завершения каждого вызова. Удалите \n :

  for (count=0;count 

C массивы индексируются начиная с 0 , а не от 1 . C автоматически не выполняет проверку границ доступа к массиву, и, действительно, ваш код хорошо сформирован. Однако его поведение во время выполнения не определено из-за его использования выражения элемента массива для записи вне границ этого массива и, отдельно, из-за его использования выражения элемента массива для чтения за пределами этого массива.

Поскольку программа определенно демонстрирует неопределенное поведение при каждом запуске, абсолютно ничего нельзя сказать о том, что она должна делать. Если на практике вы соблюдаете цикл ввода трижды, то вероятным объяснением является то, что вторая итерация перезаписывает значение переменной count . Учитывая порядок, в котором объявлены переменные, это правдоподобное проявление неопределенного поведения в игре.

С другой стороны, выходной цикл выполняет итерацию точно столько раз, сколько вы ему сказали: один раз с count == 1 и еще раз с count == 2 . Это отнюдь не гарантировано с учетом общей неопределенности исполнения вашей программы, но это касается наименее удивительного поведения, о котором я могу думать.

почему программа позволяет мне вводить 3 целых числа

Этот цикл работает ровно 2 раза:

 for (count=1;count<=SIZE;count++){ scanf("%d\n",&myArray[count]); } 

Но поскольку вы использовали \n в scanf() , этот scanf() ждет, пока вы не дадите пробелы.

Proper Input code:

 for (count=0;count 

И когда он возвращает массив, он возвращает только два числа

Ваш исходный код вывода правильно печатает первый номер, но ваш второй номер - значение мусора.

Proper Output Code:

 for (count=0;count 

Таким образом, полный код выглядит следующим образом:

 //C How to Program Exercises 2.23 #include  #include  #define SIZE 2 int main (void){ int myArray[SIZE]; int count; printf("Please enter 5 integers\n"); for (count=0;count