您的位置:首页 > 编程语言 > C语言/C++

关于C++中输入函数cin的一些总结

2017-01-25 21:45 387 查看
/*关于cin>>,cin.get(),cin.getline(),cin.clear()函数的总结*/
/*输入时总是先输入缓冲区,然后函数再去取*/
/*cin>>*/
char a[10];
char b[10];
cin>>a;
cin>>b;
cout<<a<<endl<<b<<endl;
/*cin<<接受字符到缓冲区,遇到space,tab,enter终止,其值
保留在缓冲区。如果在输入a时包含以上字符,则会截断,剩下的留在缓冲区
被b读取,也就是说第二次输入无效,cin>>忽略前一次输入留下的所有
space,tab,enter,若是cin.getline(),则不忽略,当成输入提前结束。


/*cin.get()*/
char a = cin.get();
char b = cin.get();
cout<<(int)a<<endl;
cout<<(int)b<<endl;
/*从缓冲取一个字符,遇到space,tab,enter保留在缓冲区,若a=w,b=enter,
则第二次的enter同时也结束了输入*/
/*cin.get(char ch)*/
char a,b;
cin.get(a);
cin.get(b);
cout<<int(a)<<endl<<int(b)<<endl;
/*等价于a = cin.get()*/
/*cin.get(array_name, Arsize)*/
char a[20];
cin.get(a, 10);
cout<<a<<endl;
/*读取字符串,遇space,tab保留,遇enter结束输入,
enter占一字符但不保留在缓冲区,因此实际存储Arsize个字符到
a数组,即若输出a数组,则第十个元素为空,即NULL.*/
/*cin.getline(array_name, Arsize)*/
char a[20];
cin.getline(a, 10);
cout<<a<<endl;
/*作用跟cin.get(array_name, Arsize)一样.但是,当输入字符超
出限制时,多余的字符不会保存在缓冲区,而前者多余的字符保留
在缓冲区可供下一次使用*/
/*cin.clear()*/
int a[10];
for(int i=0;i<10;i++)
{
cout<<"输入第"<<i+1<<"个数"<<endl;
cin>>a[i];
if(!cin)
{
cout<<"输入有误!";
//cin.clear();//修复输入流
//cin.sync();//清除输入流,即缓冲区数据
}
cout<<a[i];
}
/*在输入数据的时候,常会碰到类型不正确导致的错误。如以上程序中
若输入字符a会导致错误,接下来会循环输出一个错误的数字,自己没有输入
的机会。因此先要修复输入流,然后再清空,才能进行下一次输入。
若只修复不清空,输出没有改善,因为错误的值仍然在缓冲区。反之亦然。
故两个应配合使用*/
参考文章:《cin.clear()、cin.sync()和cin.ignor()的用法》点击打开链接
    cin、cin.get()、getline()(讲解的很详细)黄刚的博客点击打开链接

    c++中cin.clear()的用法点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ cin