尝试连续提示直到给出纯整数输入时出现意外结果

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

问题:当用户输入'q'时,将再次出现提示(Number:)(这是预期的)。但是,当用户输入“ q q”时,提示将出现两次,即(Number:Number:)。并且当用户输入“ q q q”时,提示将出现3次,即(Number:Number:Number:)。反正有修复此代码?我是编程新手,所以如果您尝试用外行的方式解释问题,我将不胜感激。

int main(void)
{

    char number[17];
    while (true)
    {
        printf("Number: ");
        scanf("%s", number);
        int i;
        char c;
        if (sscanf(number, "%i %c", &i, &c) == 1)
        {
            printf("%i\n", i);
            return 0;
        }
    }
}
c input integer scanf prompt
2个回答
2
投票

我已经按照你们所说的编辑了代码,并且可以正常工作。有人可以向我解释为什么这行得通吗?

int main(void)
{

    char number[17];
    while (true)
    {
        printf("Number: ");
        fgets(number, 17, stdin);
        int i;
        char c;
        if (sscanf(number, "%i %c", &i, &c) == 1)
        {
            printf("%i\n", i);
            return 0;
        }
    }
}

-1
投票

另一种解决方法是调用fflush(stdin)清除输入缓冲区。

 if (sscanf(number, "%i %c", &i, &c) == 1)
    {
        printf("%i\n", i);
        return 0;
    }
 else fflush(stdin);
© www.soinside.com 2019 - 2024. All rights reserved.