#c #for-loop #unique #variable-length-array
Вопрос:
Я учусь программировать на C и пытаюсь создать программу, которая сканирует определенное количество чисел, установленных пользователем, и сохраняет их в массиве, который я буду использовать позже, но числа, введенные пользователем, не могут быть повторены, поэтому я пытаюсь реализовать это ограничение с помощью сравнения внутри цикла for. Я пробовал использовать другие циклы, но не могу заставить их работать соответствующим образом.
Спасибо!
Вот мой код до сих пор:
#includelt;stdio.hgt; int main () { int n; int i; int num; printf("Introduce the amount of numbers you will register n"); scanf("%d",amp;n); int N[n]; printf("Introduce your numbers n"); for (i=0; ilt;n; i ) scanf ("%d",amp;num); { if (num == N[i]) { printf("You already introduced this number, try again"); } N[i]=num; printf("____________ n"); } getchar (); getchar (); return 0; }
Когда я запускаю эту программу, на выходе получается вот это, и я понятия не имею, почему
Introduce the amount of numbers you will register 5 Introduce the first value 1 ____________ ____________ ____________ ____________ You already introduced this number, try again ____________ --------------------------------
Комментарии:
1. Пользователь решает, какой длины будет массив
2.Давайте попробуем еще раз: рассмотрим
int n; ... int N[n];
—gt; Насколько велик массив gt;N[]
в то время, преждеscanf("%d",amp;n);
чем произойдет?3.
int N[n];
: в этот точный моментn
еще не инициализирован, он содержит неопределенное значение.4. Помимо проблемы с тем, когда
n
вводится, вам понадобятся две петли, а не одна. Вам понадобится внешний цикл,i
работающий от 0 доn-1
, с просьбой к пользователю ввести число. А затем вам понадобится второй, «внутренний» цикл, в котором для каждого числа, которое вводит пользователь, вы проверяете, чтобы убедиться, что его нет среди уже введенных чисел.5. Итак, что мне нужно сделать, это объявить массив после сканирования
n
?
Ответ №1:
Для начала вы не можете объявлять массив переменной длины с нулевыми элементами
int n=0; //... int N[n];
Вам нужно объявить массив после ввода положительного значения в переменную n.
int n; //... printf("Introduce the amount of numbers you will register"); scanf("%d",amp;n); int N[n];
Кроме того, поскольку массив не был инициализирован, то это сравнение
if (num == N[i])
вызывает неопределенное поведение.
Кроме того, вы должны ввести значения внутри цикла,
Вам нужно написать что-то вроде следующего
for ( i=0; ilt;n;) { scanf ("%d",amp;num); int j = 0; while ( j != i amp;amp; num != N[i] ) j; if ( j != i ) { printf("You already introduced this number, try again"); } else { N[i ] = num; printf("____________ n"); } }