| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1139 人关注过本帖
标题:关于getline函数
只看楼主 加入收藏
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
结帖率:96.67%
收藏
已结贴  问题点数:20 回复次数:5 
关于getline函数
用getline函数时,为什么要输入两次ENTER才能结束??
2011-02-24 22:24
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:10 
这个是出问题的程序
#include <iostream>
#include <string>
int main()
{ using namespace std;
  string str;
  std::cout<<"Please input your name:\n";
  getline(cin,str);
  std::cout<<"Hello,"<<str<<"!!\n";
}
 
比如说,我们输入"virus welcome back!",但是当我们输入后按回车,程序并不运行cout语句,而是光标还在编绎窗口上闪动,要再按一下[ENTER]才会运行cout这个语句输出,最后在microsof得解:
The getline template function reads an extra character after encountering the delimiter
 
Article ID : 240015  
Last Review : September 2, 2005  
Revision : 3.0  

This article was previously published under Q240015
SYMPTOMS
The Standard C++ Library template getline function reads an extra character after encountering the delimiter. Please refer to the sample program in the More Information section for details.  
 
RESOLUTION
Modify the getline member function, which can be found in the following system header file string, as follows:  
else if (_Tr::eq((_E)_C, _D))
  {_Chg = true;
  // _I.rdbuf()->snextc(); /* Remove this line and add the line below.*/  
_I.rdbuf()->sbumpc();
  break; }
Note Because the resolution involves modifying a system header file, extreme care should be taken to ensure that nothing else is changed in the header file. Microsoft is not responsible for any problems resulting from unwanted changes to the system header files.  
 
STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed in the "Applies to" section. This problem was corrected in Microsoft Visual C++ .NET.  
 
MORE INFORMATION
The following sample program demonstrates the bug:  
//test.cpp
//Compiler options : /GX
#include <string>
#include <iostream>
int main () {
std::string s,s2;
std::getline(std::cin,s);
std::getline(std::cin,s2);
std::cout << s <<'\t'<< s2 << std::endl;
return 0;
}
Actual Results:
Hello<Enter Key>
World<Enter Key>
<Enter Key>
Hello World
Expected Results:
Hello<Enter Key>
World<Enter Key>
Hello World
我给大家解释下意思吧:
症状:c++的标准库模板函数getline在读到限定符后还要读取额外字符...
解决方法:else if (_Tr::eq((_E)_C, _D)) {_Chg = true; // _I.rdbuf()->snextc(); /* 把这一行注释掉,添加下一行.*/ _I.rdbuf()->sbumpc(); break; }修改系统头文件时大家要小心点...
现状:微软已经确认这是他们产品中的'臭虫'(bug),这个bug已经在Microsoft Visual C++ .NET得到修正.
案例:如上...该文件的一般路径:C:\Program Files\Microsoft Visual Studio\VC98\Include\string 注意是string文件,不是string.h,修改后问题解决
snextc:Advances the get pointer, then returns the next character.   
stossc:Moves the get pointer forward one position, but does not return a character.


   唯实惟新 至诚致志
2011-02-25 06:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:10 
换个好点儿的编译器试试看。
en,为什么初学者还在用tc,vc++6.0之类不符合C/C++标准的编译器呢?
2011-02-25 08:21
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
因为那些VS在我的电脑上老是安装不上

   唯实惟新 至诚致志
2011-02-25 09:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用qq1023569223在2011-2-25 09:45:13的发言:

因为那些VS在我的电脑上老是安装不上
推荐两个比较好用的IDE
CodeLite: http://
Code::Blocks:http://www.
2011-02-25 10:24
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
收藏
得分:0 
谢谢大家的热心帮忙
2011-02-25 15:14
快速回复:关于getline函数
数据加载中...
 
   



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

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