首先看一个程序
如上图所示,第一个循环正常,第二次就出现问题,
问题在于fgets可以读入整行包括换行符‘\n’,但是scanf只会读取输入的字符,针对后面的回车键则不读取,由于输入输入存在缓冲机制,所以回车键留在缓冲区中,下次读取被fgets获取。第一次打印设想能够打印在一行,由于fgets含有换行符所以2换行。由于第一次输入缓冲中含有\n,所以第二次输出在同一行。怎么解决呢?
由于存在缓冲机制,所以我们只要刷新输入流就可以
特别注意在用fgets读入字符串的时候,字符串中含有换行符,读出的长度比本来的长度加一