| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 326 人关注过本帖
标题:getline()问题
只看楼主 加入收藏
lishenming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-9-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
getline()问题
程序代码:
#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    int j,time;
    cin>>time;
    for (j=0; j<time; j++)
    {
        string str;
        getline(cin, str);
        cout<<str<<endl;
    }
    return 0;
}
为什么当循环次数为3时,只能输入两次???
还有输入下面会留一大段空白。
如:
3

asa
asa
sas
sas
Press any key to continue.
这个空白是怎么回事??
2012-10-17 18:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
看起来是 输入3后的那个回车被getline读进去了
试试 cin >> time >> std::ws;

2012-10-17 22:04
lishenming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-9-14
收藏
得分:0 
回复 2楼 rjsp
srd::ws是什么意思啊??
2012-10-18 10:28
lishenming
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-9-14
收藏
得分:0 
回复 2楼 rjsp
嗯,这样可以啦。谢谢啦,就是不知道std::ws是什么意思
2012-10-18 10:29
wuyushuai521
Rank: 2
等 级:论坛游民
帖 子:80
专家分:47
注 册:2012-10-9
收藏
得分:0 
麻烦版主解释一下:std::ws的意思?谢谢。。。
2012-10-18 17:08
pangdudu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-10-18
收藏
得分:0 
其实这里面还有一个问题,如果不是使用cin>>time>>std::ws;的话,如果time输入为1的话,for循环就不会执行,这里还是不太明白,可能还是涉及到ws的用法,请帮忙解释下......
2012-10-18 17:31
qq872551969
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:1
帖 子:241
专家分:1377
注 册:2012-7-13
收藏
得分:0 
这个问题问得不错,我不是很熟悉这方面的东西,容我研究研究。

编程交流请加群:【234181324】,一起学习,一起进步,新建的群,主打C语言和JAVA等程序设计,等待高手们的入驻,无论你是高手也好,新手也好,在这里都是平等的,欢迎你们的加入~!【234181324】
2012-10-18 19:03
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用lishenming在2012-10-18 10:28:10的发言:

std::ws是什么意思啊??

ws 是 whitespace(空白字符,包括空格、制表符、回车等) 的缩写,函数原型是 istream& ws( istream& );
std::cin >> std::ws; 的作用就是将 std::cin 中接着一段空白字符取出丢掉。
为什么要丢掉?比如你输入 3 然后回车
3 被 cin>>time; 取到time中去了,但回车还在
然后 getline(cin, str); 就把这个回车读进去了,也就是str是个空字符串
我仔细想了一下,用 cin >> time >> ws; 是不对的,因为它会将下一行开头的空白字符也去掉了。这样改吧
程序代码:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int time;
    cin >> time;
    cin.ignore(); // 将随后的一个字符(即'\n')忽略掉
    for( int j=0; j<time; ++j )
    {
        string str;
        getline( cin, str );
        cout << str << endl;
    }

    return 0;
}

2012-10-19 09:51
快速回复:getline()问题
数据加载中...
 
   



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

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