首页 > 解决方案 > 尝试连续提示直到他们提供仅整数输入时出现意外结果

问题描述

问题:当用户输入“q”时,提示(数字:)将再次出现(这是预期的)。但是,当用户输入“q q”时,提示会出现两次,即(数字:数字:)。而当用户输入“qq 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;
        }
    }
}

标签: cinputintegerscanfprompt

解决方案


我已经根据你们所说的编辑了代码并且它有效。有人可以向我解释为什么会这样吗?

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;
        }
    }
}

推荐阅读