c++中cin,cin.get()的区别

cin>>c;while(c!='\n'){·······//具体操作语句省略cin>>c;}为什么用cin程序就无法执行,改成cin.get()就可以,cin.get(... cin>>c;
while(c!='\n')
{ ·······//具体操作语句省略
cin>>c;
}
为什么用cin程序就无法执行,改成cin.get()就可以,cin.get()是不是相当于c里的getchar(),那为什么在c中用getchar()和scanf都可以执行,还有如果我想把循环截止条件改为c!='#',要怎么改呢?这几个输入到底有什么区别。麻烦在计算机读取后存储在哪儿的过程和具体用法这两点上尽量讲的详细一点,谢谢
展开
 我来答
dayinspring
高粉答主

2015-11-17 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:2.3万
采纳率:92%
帮助的人:3490万
展开全部
cin>>通常只能读取一个单词。cin.get()可以读取固定长度的字符串,含空格等符号。
一、使用cin函数
由于cin通过空格、制表符、换行符来界定字符串的。故cin在获取字符时只读取一个单词长度,对于有空格的字符串其空格后面字符读不了。
例如:读取姓名
#include <iostream>
using namespace std;

int main()
{
const int size=20;
char name[size];
char add[size];
cout<<"enter name:"<<endl;
cin>>name;
cout<<"enter address:"<<endl;
cin>>add;
cout<<"your name is "<<name<<" and your address is "<<add<<endl;
return 0;
}

运行结果:
enter name:
HSING HSU
enter address:
your name is HSING and your address is HSU

该运行结果不是用户所需的结果。故需要用下面的表示方法。

二、使用cin.get()函数
(1)cin.get()函数与cin.getline()函数类似。但cin.get(name,size);读取到行尾后丢弃换行符,因此读取一次后换行符任留在输入队列中。
例:
#include <iostream>
using namespace std;

int main()
{
const int size=20;
char name[size];
char add[size];
cout<<"enter name:"<<endl;
cin.get(name,size);
cout<<"enter address:"<<endl;
cin.get(add,size);
cout<<"your name is "<<name<<" and your address is "<<add<<endl;
return 0;
}

运行结果:
enter name:
HSING HSU
enter address:
your name is HSING HSU and your address is

运行结果不是用户所需要的结果。
注:第二次直接读取的是换行符

(2)
cin.get()修改:在cin.get(name,size);后面加一条语句:
cin.get();该函数可以读取一个字符。将换行符读入。

#include <iostream>
using namespace std;

int main()
{
const int size=20;
char name[size];
char add[size];
cout<<"enter name:"<<endl;
cin.get(name,size);
cin.get();
cout<<"enter address:"<<endl;
cin.get(add,size);
cout<<"your name is "<<name<<" and your address is "<<add<<endl;
return 0;
}

运行结果:
enter name:
HSING HSU
enter address:
WU HAN
your name is HSING HSU and your address is WU HAN

运行正确。

(3)也可以将两个成员函数拼接起来cin.get(name,size).get()
使用.get()接受后面留下的换行符。

#include <iostream>
using namespace std;

int main()
{
const int size=20;
char name[size];
char add[size];
cout<<"enter name"<<endl;
cin.get(name,size).get();
cout<<"enter address:"<<endl;
cin.get(add,size);
cout<<"your name is "<<name<<" and your address is "<<add<<endl;
return 0;
}

运行结果:
enter name:
HSING HSU
enter address:
WU HAN
your name is HSING HSU and your address is WU HAN

运行正确。
zhaoyj163em
2013-10-09 · TA获得超过1033个赞
知道小有建树答主
回答量:268
采纳率:0%
帮助的人:361万
展开全部
楼主你说的“cin程序就无法执行”,那是因为cin会自动帮你忽略空格,回车等不可见字符,你判断c等不等于回车,这是永远都不可能相等的,因为cin把回车吃掉了。
cin.get()函数的功能就是getchar()的功能,能一个一个获取字符,包括不可见字符,这两者只能用来获取字符。
scanf()也可以用来都如不可见字符,例如
char c;
while( scanf("%c",&c), c != '#' )
scanf还可以用来获取其他类型的数据的。
如果你想用scanf忽略不可见字符,就这样写 scanf(" %c",&c),在百分号前面加一个空格。
循环条件可以改成:
char c;
while( (c = cin.get()) != '#')
while( (c = getchar()) != '#')
whiel( scanf(" %c",&c), c != '#')
读取存储过程这个没有研究,之知道cin他读入的东西会放到一个缓冲区里面的,这也就是为什么cin比scanf要慢很多的原因。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式