Scanf для целого числа не работает, как ожидалось, когда я вводил float или строку - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в C языке и пишу этот код для развлечения. Здесь я сначала беру имя пользователя, а затем беру от пользователя число догадки. И я написал функцию, чтобы проверить, является ли число целым или нет (нужны только целочисленные входные данные).

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    char userName[30];
    int userGuess, check;
    int checkGuess(int, int);

    printf("Enter your name - ");
    scanf("%s",&userName);
    int i = 0;
    while(++i<=10)
    {
        printf("Enter Your Guess: ");
        check = scanf("%d",&userGuess);
        checkGuess(userGuess, check);
    }
    return 0;
}

int checkGuess(int userGuess, int check)
{
    if(check == 1)
    {
        printf("yes int, %d.\n",userGuess);
    } else
    {
        printf("Not int\n");
    }

}

Однако, когда я ставлю целые числа, все работает нормально, но когда я помещаю строку или число с плавающей запятой, он просто запускается L oop до конца.

1 Ответ

0 голосов
/ 10 апреля 2020

Вам нужно грипп sh stdin, когда scanf не удается

while (i < 10)
{
    printf("Enter Your Guess: ");
    check = scanf("%d", &userGuess);
    if (check != 1)
    {
        // Flush stdin
        while ((check = fgetc(stdin)) != '\n' && check != EOF);
    }
    else
    {
        // Increment i only when scanf has success
        i++;
    }
}

Посмотрите на Зачем использовать fgets () вместо scanf () в C?

...