Почему это в бесконечном цикле? - PullRequest
0 голосов
/ 21 апреля 2019
I want to take input of integer and want to check that input is only one integer. So I have implemented some logic. But it's in infinite loop.

Логика такова: если scanf возвращает 1, это означает, что это совпадение, а если нет, то это не целое число, так как число должно быть больше 5, поэтому я также добавил эту проверку.

#include <stdio.h>
int main()
{
    //Variable Declarations
    int a[1000],n,i,j,int_check=0;

    //Input for number of terms and it should be at least 5
    printf("Enter the number of terms for the array input:");
    int_check=scanf("%d",&n);
    printf("\nscanf=%d and n=%d\n",int_check,n);

    //Input Validity checking. If scanf returns 1 that means it's a match with the input. Number of terms should be greater than 5.
    while(int_check!=1 || n<5)
    {
    printf("Enter the valid number of terms for the array inout. It should be an integer and greater than 5:");
    int_check=scanf("%d",&n);   

    }

    return 0;

}

Должен быть один экран ввода.Помогите мне определить, что не так в этой логике.

1 Ответ

3 голосов
/ 21 апреля 2019

если вы не введете действительное целое число для scanf("%d",...);, неверный ввод будет не удален, поэтому вы получите его в следующем scanf("%d",...);, поэтому (int_check!=1 || n<5) никогда не будет ложным

вам нужно сбросить неверный ввод самостоятельно, предупреждение не используйте fflush(stdin);, потому что это работает только для файла

Обратите внимание, чтобы увидеть сообщение, которое необходимо очистить, например, замените

    printf("Enter the valid number of terms for the array inout. It should be an integer and greater than 5:");

от

    printf("Enter the valid number of terms for the array inout. It should be an integer and greater than 5:\n");

или используйте fflush(stdout); после printf , если вы предпочитаете оставаться на одной линии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...