在学习如何在死循环中按键退出循环体时,发现需要读取的第二个数直接跳过了。
while (1)
{
char b;
int j;
printf("请输入您想查询的数的编号: \n");
scanf_s("%d", &j);
printf("%d (按[q]退出查询,按[c]或[回车]继续查询)\n", n[j]);
getchar();
scanf_s("%c", &b, sizeof(b));
if (b == 'q')break;
else if (b == 'c')continue;
}
第一个scanf函数运行完之后自动跳出了此次循环。
单步执行时发现第二个scanf函数自动读入了’\n’回车符
百度后总结避免读入回车符的方法如下:
1.使用getchar()函数吃入回车
2.使用rewind(stdin)函数清空缓存区(清除回车)
附:rewind(stdin);rewind重绕,倒回 st(standard) in(输入)
函数作用即为清空标准输入,清空缓存区
而fflush(stdin)函数清空缓存区在vs2015之后不便不再支持