循环在C中运行超过预期

时间:2012-03-05 19:53:37

标签: c linux unix

因此。在C,unix中编写应用程序,并且我有函数,它在输入有效之前请求用户输入。 让我们直截了当:

int inputX()
{
    int result;
    char input;
    while(1)
    {
        printf("Input x (a, b, c, d, e, f, g, h) :");
        scanf("%c", &input);
        result = validChar(input);
        if (result >= 0)
        {
            return result;  
        }
        else
        {
            printf("Invlid input. Lets try again.\n");
        }
    }
}

validChar()检查输入是否为-h。 如果我输入 - 一切都很好。 如果我输入例如1,输出

Input x (a, b, c, d, e, f, g, h) :1
Invlid input. Lets try again.
Input x (a, b, c, d, e, f, g, h) :Invlid input. Lets try again.
Input x (a, b, c, d, e, f, g, h) :

我甚至试过睡觉(),但没有工作.. C很棘手:|

3 个答案:

答案 0 :(得分:4)

使用这个便宜的技巧来摆脱缓冲区中留下的空白:

scanf(" %c", &input);
       ^

答案 1 :(得分:0)

scanf%c一起使用会让它吃掉任何角色。第二次运行可能是您输入的换行符。

答案 2 :(得分:0)

第一个电话会选择1。第二个电话会选择\n。读完整行并在之后解析。