Проверьте, представлено ли число уже в массиве со значениями, введенными пользователем

#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");   } }