在代码中这里做什么?

时间:2013-09-02 12:47:40

标签: c loops

在下面的代码中,while循环是做什么的(用“loop”标记)?: -

int main(void)
{
    char code;

    for (;;)
    {
        printf("Enter operation code: ");
        scanf(" %c", &code);
        while (getchar() != '\n')   // loop
            ;
        switch (code)
        {
        case 'i':
            insert();
            break;
        case 's':
            search();
            break;
        case 'u':
            update();
            break;
        case 'p':
            print();
            break;
        case 'q':
            return 0;
        default:
            printf("Illegal code\n");
        }
        printf("\n");
    }
}

Diclaimer:代码不完整,它只是代码的一部分,因为它无法编译。

6 个答案:

答案 0 :(得分:7)

getchar()用于消耗用户输入的额外字符和换行符\n
假设用户输入操作代码为

isupq\n // '\n' is for "Enter" button

然后,scanf()将只读取字符i,其余五个字符将被语句消耗

while (getchar() != '\n')   
        ;  

因此,对于下一次迭代,scanf()将等待用户输入一个字符,而不是从输入缓冲区中读取它。

答案 1 :(得分:3)

while (getchar() != '\n')   // loop
;

用于清理缓冲区。

这个问题解决的问题是scanf(" %c", &code);只从输入缓冲区中抓取一个字符。这样就可以了,除了输入缓冲区中仍然有一个新行,因为在输入后点击“输入”。输入缓冲区需要清除缓冲区。这就是while循环的作用

这是c

的常见问题

答案 2 :(得分:0)

scanf()通常不是扫描char变量的好方法,因为输入字符后按Enter键仍保留在输入缓冲区中。下次您致电scanf("%c", &input)此缓冲区中已存在的Enter时,会读取&分配给输入,从而跳过用户的下一个输入。

答案 3 :(得分:0)

此处应用程序等待用户按Enter键。

答案 4 :(得分:0)

由于给定代码中的for循环是无限循环,因此while循环检查输入字符是否为\n。如果输入的字符是\n,则它会移向开关盒。一般来说,它正在等待按下返回键以确认您的输入。

答案 5 :(得分:0)

如果您使用fgetc函数,则无需担心并检查无限循环中的回车键。即使您输入多个字符,也只会输入第一个字符

int main(void)
{
char code;

for (;;)
{
    printf("Enter operation code: ");
    code = fgetc(stdin);

    switch (code)
    {
    case 'i':
        insert();
        break;
    case 's':
        search();
        break;
    case 'u':
        update();
        break;
    case 'p':
        print();
        break;
    case 'q':
        return 0;
    default:
        printf("Illegal code\n");
    }
    printf("\n");
}
}