我写了下面的一段代码:
TCHAR ch;
for(;;)
{
scanf(TEXT("%c"), &ch);
printf(TEXT("%c\n"), ch);
}
本来的目的是想输入一字符,打印出一个字符,一直持续下去。但是实际的输出确是,不只是打出了输入得字符,尽然还多打了一个换行。
后来通过查资料才知道scanf竟然连表示输入结束的\n也不放过,因而导致了每次多输出一个回车。那么,如果让下一轮循环的scanf不会读取到上一次表示输入的\n呢?很简单,在printf后调用fflush(stdin)即可,清空输入buffer,就能得到满意的结果了。
但是,还有一点是比较有意思的,如果我直接输入\n,scanf会把这唯一的\n既当成是输入结束符,又看做是输入的字符,scanf返回后,ch变量值是\n