在pta上有这样一道题,本人在代码书写过程中,发现对于字符加上数字的联合多行输入过程中存在意外。
事实是在联合输入的过程中,后者会存在无法读入的情况,经过多方搜寻,本人发现此处需要利用getchar()函数吞掉上一个输入后带的\n,也正是这个\n导致后面的scanf无法写入。
原因如下:
当从键盘输入时,键盘输入的字符会保存在缓冲区,当键盘按下enter时,缓冲区被清空,缓冲区的内容被写入目标内,比如我这段代码的目标就是str,即我从键盘输入的list被写入str数组里,这个时候缓冲区还有什么呢?准确的说,这时缓冲区里还有一个字符'\n',
如果不加getchar(),缓冲区会把'\n'这个字符写进下一个scanf_s,这时程序就会像上面那样,直接结束.而加了getchar();它会吃了缓冲区里的'\n'字符,这时候缓冲区才是真的什么都没有,scanf_s等待缓冲区写入内容,这时程序才会像下面那样执行.
除此以外,getchar还有一个功能:使程序不会立即退出,类似于system("pause")