我今天遇到了类似的问题,我找到了一种似乎可行的方法。我不知道你的情况的细节,所以我不知道它是否对你有用。
我正在编写一个需要从键盘获取单个字符的例程,并且它需要是三个特定击键之一(“1”、“2”或“3”)。如果不是其中之一,则程序需要发送错误消息并循环返回以再次尝试。
问题在于,除了 getchar() 返回的我输入的字符之外,“Enter”键击(将击键发送到程序)保存在输入缓冲区中。该(非打印)换行符然后由纠错循环中的 getchar() 工具返回,进一步导致第二条错误消息(因为换行符不是“1”,也不是“2” ,也不是“3”。)
问题更加复杂,因为我有时会超前于自己,而不是输入单个字符,而是输入这些选项之一将请求的文件名。然后我在缓冲区中有一整串不需要的字符,导致一长串错误消息向下滚动屏幕。
不酷。
但是,似乎已经解决了它的问题如下:
c = getchar(); // get first char in line
while(getchar() != '\n') ; // discard rest of buffer
第一行是实际使用我输入的字符的行。第二行处理输入缓冲区中剩余的任何残留物。它只是创建一个循环,一次从输入缓冲区中提取一个字符。语句循环时没有指定要执行的操作。它只是读取一个字符,如果它不是换行符,则返回下一个。当它找到换行符时,循环结束并继续程序中的下一个业务顺序。