我们知道,stdin默认情况下,这是一个缓冲输入;证明是使用任何“保留数据”的机制stdin,例如scanf():
int main()
{
char c[10] = {'\0'};
scanf("%9s", c);
printf("%s, and left is: %d\n", c, getchar());
return 0;
}
./a.out
你好
你好,左边是10
10当然是换行...
我一直很好奇,有没有什么办法可以“偷看”stdin缓冲区而不删除那里可能存在的任何东西?
编辑
一个更好的例子可能是:
scanf("%9[^.]", c);
输入“at.ct”,现在我ct\n留下了“数据”()stdin,而不仅仅是换行符。