清除C/C++中的输入缓冲区,妈妈再也不用担心我的学习|热闻

什么是缓冲区?


(资料图)

临时存储区称为缓冲区。所有标准输入和输出设备都包含一个输入和输出缓冲区。在标准C / C ++中,流被缓冲,例如在标准输入的情况下,当我们按键盘上的键时,它不会发送到您的程序,而是由操作系统缓冲,直到分配给该时间为止。

它如何影响编程?

在各种情况下,您可能需要清除不需要的缓冲区,以便在所需容器中而不是先前变量的缓冲区中获取下一个输入。例如,对于C遇到“ scanf()”后,我们需要输入一个字符数组或字符,对于C ++,遇到“ cin”语句后,我们需要输入一个字符数组或一个字符串,那么我们需要清除输入缓冲区,否则所需的输入将被先前变量的缓冲区占用,而不是所需的容器。在第一个输入之后在输出屏幕上按“ Enter”(回车),因为先前变量的缓冲区为新容器的空间(因为我们没有清除它),程序将跳过以下容器输入。

如果是C编程

输入:

输出:

如果是C ++

输入:

输出:

在上述两个代码中,输出均未按要求打印。原因是占用了缓冲区。“ \ n”字符保留在缓冲区中,并作为下一个输入读取。

如何解决?

如果是C:

1.使用“ while((getchar())!="\ n"); ”:键入“ while((getchar())!="\ n");” 读取缓冲区字符直到结尾并丢弃它们(包括换行符),并在“ scanf()”语句清除输入缓冲区并允许输入所需的容器之后使用它们。

2.使用“ fflush(stdin)”:在“ scanf()”语句之后键入“ fflush(stdin)”也将清除输入缓冲区,但是避免使用它,并且根据C ++,对于输入流,它被称为“未定义” 11个标准。

如果是C ++:

1.使用“ cin.ignore(numeric_limits :: max(),"\ n"); ”:-输入“ cin.ignore(numeric_limits :: max(),"\ n");” 在“ cin”语句之后,将丢弃输入流中的所有内容,包括换行符。

2.使用“ cin.sync()”:在“ cin”语句之后键入“ cin.sync()”会丢弃缓冲区中剩余的所有内容。尽管“ cin.sync()”并非在所有实现中都有效(根据C ++ 11和更高版本的标准)。

3.使用“ cin >>ws”:在“ cin”语句之后键入“ cin >>ws”,告诉编译器忽略缓冲区,并丢弃字符串或字符数组实际内容之前的所有空格。

当然,还有别的方法,这个就看你们的了。这里只是给你们提出几个解决办法。

关键词: 不用担心我