#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 шага:
- считывает вводимые пользователем данные во временную переменную.
- Присваивайте временную переменную элементу массива, только если значение положительное.
Вот рабочий код:
#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. это имеет смысл