Причина этого: когда ваши поля объектов могут быть пустыми, реализация Object.equals может быть болью, потому что вам нужно отдельно проверить значение null. Использование Objects.equal позволяет выполнять проверки равных с помощью NULL-чувствительности, не рискуя исключением NullPointerException. Objects.equal("a", "a"); // returns true
Objects.equal(null, "a"); // returns false
Objects.equal("a", null); // returns false
Objects.equal(null, null); // returns true
Ваши циклы должны быть
for (count=0;count<SIZE;count++)
Индексация массива - 0
, основанная на C.
Так как в вызове scanf()
есть пробельный чат (\n
) , он ожидает, что вы введете символ без пробелов для завершения каждого вызова. Удалите \n
:
for (count=0;count<SIZE;count++){
scanf("%d",&myArray[count]);
}
, почему программа позволяет мне вводить 3 целых числа
blockquote>Этот цикл работает ровно 2 раза:
for (count=1;count<=SIZE;count++){ scanf("%d\n",&myArray[count]); }
Но поскольку вы использовали
\n
вscanf()
этотscanf()
ждет, пока вы не дадите пробелы.
Proper Input code:
for (count=0;count<SIZE;count++){ scanf("%d",&myArray[count]); }
И когда он возвращает массив, он возвращает только два числа
blockquote>Ваш исходный код вывода правильно печатает первый номер, но ваш второй номер - значение мусора.
Proper Output Code:
for (count=0;count<SIZE;count++){ printf("The values of myArray are %d\n",myArray[count]); }
So Полный код выглядит следующим образом:
//C How to Program Exercises 2.23 #include <stdio.h> #include <conio.h> #define SIZE 2 int main (void){ int myArray[SIZE]; int count; printf("Please enter 5 integers\n"); for (count=0;count<SIZE;count++){ scanf("%d",&myArray[count]); } for (count=0;count<SIZE;count++){ printf("The values of myArray are %d\n",myArray[count]); } getch(); return 0; }
C массивы индексируются начиная с 0
, а не от 1
. C автоматически не выполняет проверку границ доступа к массиву, и, действительно, ваш код хорошо сформирован. Тем не менее, его поведение во время выполнения undefined из-за его использования выражения элемента массива для записи вне границ этого массива и, отдельно, из-за его использования выражения элемента массива для чтения за пределами границ из этого массива.
Поскольку программа определенно демонстрирует неопределенное поведение при каждом запуске, абсолютно ничего нельзя сказать о том, что она должна делать. Если на практике вы наблюдаете тройку ввода, повторяющуюся три раза, то вероятным объяснением является то, что вторая итерация перезаписывает значение переменной count
. Учитывая порядок, в котором объявлены переменные, это правдоподобное проявление неопределенного поведения в игре.
Выходной цикл, с другой стороны, повторяет то же количество раз, что вы ему сказали: один раз с count == 1
и еще раз с count == 2
. Это ни в коем случае не гарантируется с учетом общей неопределенности исполнения вашей программы, но речь идет о наименее неожиданном поведении , о котором я могу думать.