cin和stdin(c++如何清空输入流)

本文目录
- c++如何清空输入流
- 关于C++输入cin的问题,下面的程序,如果输入的不合法,那就将陷入死循环,为什么如何理解求高人指点
- cin是什么
- C++中流的问题
- c++中std::cin和cin的区别
- c++里!cin是什么意思
c++如何清空输入流
在标准C中只定义了输出流、更新流的刷新,而输入流的刷新是未定义的。
当然,在vc下面的fflush(stdin)是微软自己扩展的,而GCC下面是没有的。
c语言:
while( (c=getchar())!=’\n’ && c != EOF)
;
c++:
cin.clear(); //这里如果用cin.clear(istream::failbit); 是不行的
cin.ignore(numeric_limits《streamsize》::max(),’\n’);
关于C++输入cin的问题,下面的程序,如果输入的不合法,那就将陷入死循环,为什么如何理解求高人指点
当你在控制台输完数据敲回车后,输入的数据以及回车换行符被同时送到输入缓冲区,例如你输入的数据为a,然后回车,此时输入缓冲区中就有两个字符,一个是‘a’,一个是回车换行符‘/n’,接着程序读取,由于类型不匹配,读取失败,并没有读走输入缓冲区中的数据,也就是说,此时输入缓冲区中还是‘a’,和‘\n’,接着while循环继续读输入缓冲区,依然类型不匹配,于是就成了死循环
cin是什么
首先,cin 是个C++类型对象,它的类型是basic_istream,scanf 是个不定参数的函数,
其次,cin 所属的类重载了 》》 运算符,使输入更简单了,比如
double d; cin》》d;
而 scanf 不一样的,
double d;scanf("%lf",&d);
看起来麻烦一点。
另外,cin 也更安全,不会发生内存溢出。
char c; scanf("%lf",&c); //这时需要8个字节的空间,但只提供一个,内存溢出。
而 cin 也更安全
char c;cin》》c; //只输入字符,不会溢出
从底层上来说,C++ 的 cin 与 C语言的 scanf 都采用 stdin 作为输入源, 但cin和scanf 采用了不同的缓冲区,可以通过 ios 头文件里面的 sync_with_stdio () 函数设置缓冲区共享,使cin和scanf 共享缓冲区。
C++也可以改变输入源,但这样很复杂。
其实,C++对 stdin 进行了封装,用流和迭代器进行了转变了流的概念而已,而C的scanf直接操作 stdin而已
C++中流的问题
正解:
cin是标准输入流,是一个全局变量。它是从缓冲区读取数据送入流。
cin.clear(); fflush(stdin);
看这两函数如果读取一个整数,而缓冲区里是一个字母。流的状态会变坏。通过clear()可以将流的状态更正,但是等下一次去读的时候,读到还是这个字母,所以流的状态还是错误所以会进入到死循环。所以你不仅要更正流状态还要刷新缓冲区,谢谢!
你为什么不自己动手呢?
clear()没有参数不是清除全部,而是有默认参数的,原型是
void clear( iostate = goodbit );
看下面的吧,请输入一个非法输入(也就是不要输入整数)来破坏流。
然后分别用clear(istream::badbit);clear(istream::goodbit);clear(istream::failbit);来测试
good()返回的是goodbit == 1;
bad()返回的是badbit == 1;
fail()返回的是failbit == 1;
我得到的测试结果:
//istream::goodbit
//a
//0 0 1
//1 0 0
//istream::badbit
//a
//0 0 1
//0 1 1
//istream::failbit
//a
//0 0 1
//0 0 1
#include 《iostream》
using namespace std;
int main()
{
int a;
cin 》》 a;
cout《《cin.good()《《" "
《《cin.bad()《《" "
《《cin.fail()《《endl;
cin.clear(istream::failbit);
cout《《cin.good()《《" "
《《cin.bad()《《" "
《《cin.fail()《《endl;
return 0;
}
c++中std::cin和cin的区别
没有区别,是新旧 两种 c++ 标准的不同表达形式
新的c++标准中,cin,cout 被放入了 std 空间了,所以在使用的使用 必须使用std::cin,std::cout,或者使用using 进行 说明
c++里!cin是什么意思
!cin的意思是用户输入的是false(0值)或其它的非0值,当是0值的时候!cin为true,否则为false。
int i;
cin》》i;
表示等待输入一个int值
是一个全局输入流对象,在iostream文件里面声明,在iostream.cpp里面定义。这个对象重载了移位符》》。
扩展资料
cin的使用
# include《iostream》
using namespace std;
int main(void)
{
int a,b;
cout《《"a:_\b";
cin》》a;//如输入char就会有多余的字符漏在缓冲区
cin.clear();//恢复goodbit
cin.sync();//清空缓冲区
cin.clear();
fflush(stdin);
cin.clear();
cin.ignore(次数,’需要结束的字符(这儿就是\n)’);//一般次数取得足够大让结束符起作用,如cin.ignore(6,’a’);
cout《《"b:_\b";
cin》》b;
cout《《"a="《《a《《",b="《《b;
system("pause");
return 0;
}

更多文章:
blast premier春季赛(csgo战队vitality有谁)
2026年9月7日 21:50
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00




