Проверка положительности элементов, введенных пользователем в массив

#arrays #c #while-loop #infinite-loop #do-while

#массивы #c #цикл while #бесконечный цикл #do-while

Вопрос:

У меня есть программа, которая просит пользователя ввести элементы, которые будут назначены в массив. Но я хочу проверить, является ли введенное число положительным или отрицательным. При наличии отрицательного числа программа должна предупредить пользователя и попросить пользователя снова ввести положительные числа. Я написал свой код, но он переходит в бесконечный цикл. Как сделать это правильно?

вот мой код:

 #include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main()
{
    
   int A[MAX] = {};
   int n,jj;
   


    printf("How many numbers do you want to enter?n");
    scanf("%d",amp;n);


    for (jj=0; jj<n; jj  )
        {

            printf(" enter the %d. numbern", (jj 1));
            scanf("%d",amp;A[jj]);

            while(A[jj]<=0){

                printf("Please enter only positive numbers");
            }

        }

return 0;
}
 

Комментарии:

1. Где объявлены переменные n и jj?

2. Поскольку это часть более крупной программы, я вырезал часть кода, но забыл эти переменные. Я добавил снова. @VladfromMoscow

3. OT: вы должны правильно отформатировать свой код.

4. Просто в качестве примечания: небезопасно использовать scanf без проверки возвращаемого значения. Смотрите эту страницу для получения дополнительной информации: руководство для начинающих от scanf()

Ответ №1:

Для начала эта инициализация с использованием пустого связанного списка

 int A[MAX] = {};
 

неверно в C. Вы должны написать

 int A[MAX] = { 0 };
 

Очевидно, что этот цикл

 while(A[jj]<=0){

    printf("Please enter only positive numbers");
}
 

является бесконечным циклом, когда A[jj] не является положительным. Итак, что вы делаете, это то, что вы получаете.

Вместо этого вы могли бы написать, например

     for (jj=0; jj<n; jj  )
    {

        printf(" enter the %d. numbern", (jj 1));
        
        do
        {
            scanf("%d",amp;A[jj]);

            if ( A[jj]<=0 )
            {
                printf("Please enter only positive numbers");
            }
        } while ( A[jj] <= 0 );

    }
 

Ответ №2:

Причина бесконечного цикла связана с использованием while(A[jj]<=0)

Проблема может быть решена в эти 2 шага:

  1. считывает вводимые пользователем данные во временную переменную.
  2. Присваивайте временную переменную элементу массива, только если значение положительное.

Вот рабочий код:

 #include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main() {
    
   int A[MAX] = {};
   int n, jj, temp = 0;
   
    printf("How many numbers do you want to enter?n");
    scanf("%d",amp;n);


    for (jj = 0; jj < n; jj  ) {

            printf("Enter the # %d number : ", (jj 1));
            scanf("%d",amp;temp);
            if (temp < 0) {
                printf("Negative number will not be accepted. Please try againn");
                --jj;
                continue;
            }
            A[jj] = temp;
        }

return 0;
}
 

Вывод:

 How many numbers do you want to enter?
3
Enter the # 1 number : 1
Enter the # 2 number : -2
Negative number will not be accepted. Please try again
Enter the # 2 number : 2
Enter the # 3 number : 3
 

Комментарии:

1. это имеет смысл