| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2219 人关注过本帖
标题:[求助]getline函数问题
只看楼主 加入收藏
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
因为cin>>num的原因,
流缓冲指针指向你输入的数字后的'\n',所以getline时就是直接从'\n'开始读取,因此:
input:
3
a
b
c

output:

a
b
可以看出,读的是:
"\n"
"a\n"
"b\n"
取的是:
""
"a"
"b"

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-06-03 11:33
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

to wfpb:
你分析的我也觉得有道理,但在G++下
#include<iostream>
#include<string>
using namespace std;

int main()
{
int n;
cout<<"输入数字!"<<endl;
cin>>n;

string *fruit=new string [n];

for(int i=0; i<n; i++)
{
getline(cin,fruit[i]);
}
cout<<endl;

for(int i=0; i<n; i++)
{
cout<<fruit[i]<<endl;
}

return 0;
}


input:
3
a
b


output:
a
b

也就是说,只能输入两次,这个是编译器的关系吧


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-06-03 13:26
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

两个编译器的头文件和库文件是不是都一样啊?比如说cin>>和getline的实现代码是不是一样啊?或者有关流操作的实现是不是都一样?


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-06-03 15:13
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
回复:(wfpb)两个编译器的头文件和库文件是不是都一...
我想这个应该要一样吧,不然怎么统一啊!

搞不懂!

Fight  to win  or  die...
2007-06-03 16:15
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
try:

#include<iostream>
#include<string>
using namespace std;

int main()
{
int n, i;
cout<<\"Please enter a number: \";
cin>>n;
cin.clear();
while(!isspace(cin.get()))
continue;

string * fruit=new string [n];

for(i = 0; i<n; i++)
getline(cin, fruit[i]);

cout<<endl;

for(i=0; i<n; i++)
{
cout<<fruit[i]<<endl;
}
return 0;
}


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2007-06-03 17:00
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
神,出现了。

kai, while(!isspace(cin.get()))
continue;
什么意思?

我们在讨论为什么第一次getline会自动读取cin缓冲区里的‘\n’。



Fight  to win  or  die...
2007-06-03 17:29
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
楼主那段程序的问题就在那个cin>>n;
大家可以做一下实验,把那个n 赋个初值,比如3,然后把那个cin>>n; 去掉,问题就没有了。所以问题出现在这个cin上。

我的那段代码中的while, 就是用于补救cin 所造成的困境。

cin.clear() // reset stream state
while(!isspace(cin.get()))
continue; // get rid of bad input

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2007-06-03 17:54
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
这只是一些小技巧而已,只是知道和不知道的区别,没有什么。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2007-06-03 17:55
快速回复:[求助]getline函数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015468 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved