| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2679 人关注过本帖
标题:C++primer中关于getline使用循环的问题
只看楼主 加入收藏
w470913537k
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2012-10-29
结帖率:77.78%
收藏
 问题点数:0 回复次数:11 
C++primer中关于getline使用循环的问题
程序主干如下:
int main ()
{
    string line;
    while (getline(cin,line))
           cout<<line<<endl;
    return 0;
}
2013-03-19 18:31
w470913537k
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2012-10-29
收藏
得分:0 
我想说的是,这个程序无法终止循环,在iostream输入流中,书上解释说如果遇到不符合的输入流则将终止从流中读取数据,可是这样输入字符串怎么才能终止?书中这个小程序是不是有点问题,该改改。我直接打回车是没法终止的,对于getline函数,如果首字符是回车,那么字符串为空。
2013-03-19 18:32
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
好像是ctl+z吧...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-19 18:50
gwcome
Rank: 2
来 自:尼玛星球
等 级:论坛游民
帖 子:43
专家分:33
注 册:2013-1-22
收藏
得分:0 
At end of file.
After the function extracts an element that compares equal to delim, in which case the element is neither put back nor appended to the controlled sequence.
After the function extracts is.max_size() elements, in which case the function calls setstate(ios_base::failbit).

小菜小菜
2013-03-19 18:58
gwcome
Rank: 2
来 自:尼玛星球
等 级:论坛游民
帖 子:43
专家分:33
注 册:2013-1-22
收藏
得分:0 
msdn上搬过来的

小菜小菜
2013-03-19 19:01
luoshibin138
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2013-3-5
收藏
得分:0 
打回车怎么就能终止呢?回车是正常的输入,不算“不符合的输入流”,想退出就自己写个退出条件憋。“不符合的输入流”估计用户在键盘输入时也很难输入,如果可以很容易输入,那程序不是经常会终止,所以还是自己写个退出条件吧!如:
   int main(int argc,char*argv[])
  4 {
  5     string line;
  6     while (getline(cin,line)){
  7         cout<<line<<endl;
  8         if(line=="q") break;
  9     }
 10     return 0;
}
2013-03-19 22:07
w470913537k
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2012-10-29
收藏
得分:0 
回复 6楼 luoshibin138
嗯嗯。。。我也觉得是这样。。看来是书上有点问题。
2013-03-19 22:23
gwcome
Rank: 2
来 自:尼玛星球
等 级:论坛游民
帖 子:43
专家分:33
注 册:2013-1-22
收藏
得分:0 
回复 6楼 luoshibin138
为什么我的编译器变异通不过
程序代码:
#include <iostream>
using namespace std;
int main(int argc,char*argv[])
{
         string line;
         while (cin.getline(cin,line)){
             cout<<line<<endl;
            if(line=="q") break;
                
         }
return 0; 
}

1、error C2664: “std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)”: 不能将参数 1 从“std::istream”转换为“char *”
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
2、fatal error C1903: 无法从以前的错误中恢复;正在停止编译

小菜小菜
2013-03-20 10:19
qq372505855
Rank: 2
等 级:论坛游民
帖 子:42
专家分:46
注 册:2012-6-20
收藏
得分:0 
字符串的结束好像是'\0'
2013-03-20 12:34
luoshibin138
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2013-3-5
收藏
得分:0 
你的代码多了一个cin是什么意思:我改了下不知是你想要的不

  #include<iostream>
  2 using namespace std;
  3 main(int argc,char*argv[]){
  4     string line;
  5     while (getline(cin,line)){
  6         cout<<line<<endl;
  7         if(line=="q") break;
  8     }
  9 }
2013-03-20 22:15
快速回复:C++primer中关于getline使用循环的问题
数据加载中...
 
   



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

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