Как написать программу на C, которая определяет, является ли ввод простым и числовым - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь написать программу на C, которая запрашивает ввод числа, а затем определяет, является ли оно простым числом.Если ввод представляет собой не числовой символ или строку, он выводит сообщение INVALID INPUT.Мне удалось создать код, который может определить, является ли число простым, а также не числовым, но когда я пытаюсь их объединить, оно не работает.Например, если я введу нечисловое значение, оно выведет правильное сообщение, но когда я введу числовое значение, ничего не произойдет, и я не уверен, почему.Кто-нибудь может помочь?

#include <stdio.h>
#include <string.h>
#define FALSE 0
#define TRUE 1

int numeric( char *string )
{
    int i, valid;
    valid = TRUE;

    if (string[i] < '0' || string[i] >'9')
        valid = FALSE;
    return valid;
}

void main()
{
    char number[5];
    printf("Please enter a decimal number>");
    gets( number );

    if (numeric(number) == TRUE)
    {
        int n, i, a = 0;
        scanf_s("%d", &n);

        for (i = 2; i <= n / 2; ++i)
        {
            if (n%i == 0)
            {
                a = 1;
                break;
            }
        }

        if (n == 1)
        {
            printf("1 isn't a prime number.");
        }
        else
        {
            if (a == 0)
                printf("number entered is a prime number");
            else
                printf("number entered is not a prime number");
        }
    }
    else 
        printf("INVALID INPUT \n"); 
} 

1 Ответ

0 голосов
/ 25 ноября 2018

В дополнение к ошибке, упомянутой в комментарии @ Михаила (не удалось инициализировать i в ноль в numeric:

Ваша проблема в том, что в истинной ветви if (numeric(number)) вы вызываете scanf_s, который попытается прочитать новый ввод от STDIN. Вы уже прочитали число от STDIN в своем вызове до gets. Следует наблюдать поведение, которое вы наблюдаете («ничего не происходит»): ваша программаждет, когда вы введете больше ввода.

Вы оставляете себя открытым для переполнения буфера, но это отдельная проблема.

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