3

在以下代码中,while 循环在做什么(标有“循环”)?:-

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

免责声明:代码不完整,只是代码的一部分,因此无法编译。

4

6 回答 6

7

getchar()在这里用来吃掉用户输入的多余字符和换行符\n
假设用户输入的操作码为

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

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

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

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

于 2013-09-02T12:48:47.767 回答
3
while (getchar() != '\n')   // loop
;

是来清理缓冲区的。

这同时解决的问题是scanf(" %c", &code);仅从输入缓冲区中获取单个字符。这很好,只是输入缓冲区中仍然有一个换行符,这是在您输入后点击“输入”导致的。输入缓冲区需要缓冲区清除。这就是while循环的作用

这是c的常见问题

于 2013-09-02T12:51:48.320 回答
0

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

于 2013-09-02T12:50:30.963 回答
0

这里应用程序等待用户按回车。

于 2013-09-02T12:54:34.767 回答
0

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

于 2013-09-02T12:55:20.793 回答
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");
}
}
于 2013-09-02T12:56:44.887 回答