在下面的代码中,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:代码不完整,它只是代码的一部分,因为它无法编译。
答案 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");
}
}