我的一个scanf循环在执行之前要求两个输入。空白问题?

问题描述 投票:0回答:1

语言:C

编译器:Visual Studio 2017 / Win 32

所以基本上我的任务是制作一个乘法游戏,它采用两个随机的单位数字,并提示用户将它们相乘。该程序必须是防弹的,因此它必须循环用户,直到他们输入正确的输入(例如,如果他们输入一个字母,它必须循​​环它们直到他们输入正确的NUMBER)。我已经尝试了几个东西,而do / while循环似乎运行得很好。但是,当用户输入错误答案并再次尝试时,2ND do / while循环中的scanf将使它们输入两个输入(忽略第一个输入)。我过去遇到过这个问题并尝试了无数次修复它,但我无法找到解决方案。任何帮助将非常感激。

谢谢!

尝试使用fgets。悲惨地失败了。我删除了getchar()!='\ n'。这工作,但程序将循环“请输入一个整数”无限。

    while (answer != correct)
    {
        srand(time(NULL));
        int wrong = 1 + rand() % 5;

        switch (wrong)
        {
        case 1:
            SetConsoleTextAttribute(h, FOREGROUND_RED | FOREGROUND_INTENSITY);
            printf("\n               ***\n");
            printf("              Wrong!\n");
            printf("               ***\n");
            SetConsoleTextAttribute(h, wOldColorAttrs);
            break;
        case 2:
            SetConsoleTextAttribute(h, FOREGROUND_RED | FOREGROUND_INTENSITY);
            printf("\n                ***\n");
            printf("               Nope!\n");
            printf("                ***\n");
            SetConsoleTextAttribute(h, wOldColorAttrs);
            break;
        case 3:
            SetConsoleTextAttribute(h, FOREGROUND_RED | FOREGROUND_INTENSITY);
            printf("\n                 ***\n");
            printf("              Not quite!\n");
            printf("                 ***\n");
            SetConsoleTextAttribute(h, wOldColorAttrs);
            break;
        case 4:
            SetConsoleTextAttribute(h, FOREGROUND_RED | FOREGROUND_INTENSITY);
            printf("\n              ***\n");
            printf("          Incorrect!\n");
            printf("              ***\n");
            SetConsoleTextAttribute(h, wOldColorAttrs);
            break;
        case 5:
            SetConsoleTextAttribute(h, FOREGROUND_RED | FOREGROUND_INTENSITY);
            printf("\n                 ***\n");
            printf("          Nope! Try again!\n");
            printf("                 ***\n");
            SetConsoleTextAttribute(h, wOldColorAttrs);
            break;
        }

        do {
        printf("Enter a number to represent your answer! ");
        while (getchar() != '\n');
        } while (scanf_s("%d", &answer) != 1);
        getchar();
    }

我只是希望用户能够顺利输入数字,而不会产生令人困惑的scanf错误。

c scanf
1个回答
0
投票

您可以像此示例中那样获取输入

#include <stdio.h>

int main(void)
{
    char anstr[100];
    int answer;
    do { 
        printf("Enter ... answer! ");
        if(fgets(anstr, sizeof anstr, stdin) == NULL) {
            return 1;
        }
    } while(sscanf_s(anstr, "%d", &answer) != 1);
    printf("The answer is %d\n", answer);
    return 0; 
}

基于%d格式说明符将消耗所有前导空格,并且通过读取另一个字符串输入将丢弃错误输入。

计划会议:

Enter ... answer! alice
Enter ... answer! bob
Enter ... answer! 42
The answer is 42
© www.soinside.com 2019 - 2024. All rights reserved.