关于getline()与gets()的注意事项
此两个函数都是用来读取一行字符串的,遇到换行符认为读行结束并把换行符从缓冲区读取然后丢掉
对于scanf(),如果读取%c,那么空格和换行符都会读取,如果是其他的数据类型,例如为整型%d,那么在整型输入之前的空格和换行符会读取并丢弃,但当输入整型之后,若碰到空格和换行符,那么就截止,此时并没有读取后面的空格或换行符,仍然会被保留在缓冲区里,终于弄明白此过程之外,就很好解释我遇见的问题:
我先用scanf(’%d",n)读取一个整数,然后用gets(与getline原理一样(个人理解))读取一个字符串,发现字符串是空的,读懂上面的话就很容易理清原因了,scanf()读取完之后,还留着换行符在缓冲区里,此时gets去读数据,直接遇到换行符,认为读取行结束,并把换行符丢弃,所以读取的字符串是空的。解决办法是在输入整型之后利用getchar()把换行符读掉。而之后每次读取完一行不用再getchar()一下是因为gets遇到换行符时会读取并丢弃。