清除cin输⼊缓冲区,以及system(“pause“)、system(“cls“)⽤法system(“pause”)、system(“cls”)
system(“pause”):简单来说就是暂停的意思,等待接收信号,才会重新运⾏ system就是从程序中调⽤系统命令zhi和daoshell命
令,“pause”这个系统命令的功能很简单,就是在命令⾏上输出⼀⾏类似于“Press any key to exit”或“请按任意键继续…”的字,等待⽤户按⼀个键,然后返回。
system(“cls”):请出输出屏幕上的字符数据。
清除C/C++(cin)输⼊缓冲区的⽅法
1、fflush(stdin)
C语⾔:清空输⼊缓冲区的所有内容,在VS中没有效果
system的头文件2、cin.sync()
C++:清除输⼊缓冲区的所有内容,在VS中没有效果
3、cin.ignore(std::numeric_limits< streamsize >::max(), ‘\n’)
C++:清除输⼊缓冲区的所有内容,直到遇到回车符为⽌, 各种编译器都有效
简要说明:
cin.ignore(count, c);
从输⼊流中提取并丢弃字符,直到遇到下列三种情况
1.提取的字符达到了参数count指定的数量
2.在输⼊序列中遇到⽂件结束(EOF)
3.输⼊序列中的下⼀个字符为参数c指定的字符(这个字符会被提取并丢弃)
可以写成: cin.ignore(10, ‘\n’);
提取输⼊缓冲区中的数据,直到遇到回车符,当读取的数据到达⼗个时,就会停⽌提取,不会继续提取到回车符。(限制提取⼗个数据)
count常常取:
std::numeric_limits< std::streamsize >::max() 相当于IO流的最⼤字符个数
常见⽤法:(把标准输⼊缓冲区cin的所有数据都清空)
cin.ignore(std::numeric_limits< streamsize >::max(), ‘\n’);
注意:
(1)cin.ignore(std::numeric_limits< streamsize >::max(), ‘\n’);在有包含头⽂件#include <Windows.h>时是⽆法使⽤的;
(2).因为该头⽂件已经包含了宏定义min 和 max,再使⽤就会优先调⽤头⽂件#include<Windows.h>中的宏定义,就会起冲突,从⽽导致报错;
(3)如果有要求要包含头⽂件#include <Windows.h>,⽽且还要使⽤cin.ignore(std::numeric_limits< streamsize >::max(), ‘\n’);的话,需要在包含头⽂件#include<Windows.h>之前加上⼀句#define NOMINMAX,限定头⽂件#include<Window.h>中的宏定义min 和max 就⾏了;
(4)或者直接删去头⽂件#include<Windows.h>也可以解决问题
4、还有⼀种解决⽅法:
cin.ignore((std::numeric_limits< streamsize >::max)(), ‘\n’);
在回车符前⾯加上⼀个括号就可以了,因为不加()的话,max 就和系统中已经有的,预定义的max宏函数混淆了
char c;
while ((c = getchar()) != ‘\n’);
C/C++:循环读取输⼊缓冲区的数据,直到遇到回车符为⽌,效果等效于:清空输⼊缓冲区的所有数据,直到遇到回车符为⽌。 在各种编译器中有效
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论