关于getline函数对字符串的处理(c++)
本帖最后由 昨非 于 2021-1-28 21:55 编辑题目要求是:比较string类的输入运算符和getline函数对带有空白字符的字符串的处理差异
测试输入为(前中后都有空格):
Welcome to c++ family!
参考代码如下:
/*
两种字符串读取的方式对空白字符处理的差异:
标准输入忽略开头的所有空白,从第一个字符读到下一个空白
getline从开头读到下一个换行符(换行符被读入但不存储在字符串中)
*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
string word, line;
cout << "请选择读取字符串的方式:1 表示逐词读取,2表示整行读取" << endl;
char ch; //输入的选择
cin >> ch;
if (ch == '1')
{
cout << "请输入字符串: Welcome to c++ family! " << endl;
cin >> word;
cout << "系统读取的有效字符串是:" << endl;
cout << word << endl;
return 0;
}
//清空输入缓冲区
cin.clear();
cin.sync();//清空流
if (ch == '2')
{
cout << "请输入字符串: Welcome to c++ family! " << endl;
getline(cin, line);
cout<< "系统读取的有效字符串是:" << endl;
cout << line << endl;
return 0;
}
cout << "您得输入有误!";
return -1;
}
遇到的问题:
在输入2并回车测试getline函数部分的时候,出现直接跳出的情况,输出结果为空字符串
请选择读取字符串的方式:1 表示逐词读取,2表示整行读取
2
请输入字符串: Welcome to c++ family!
系统读取的有效字符串是:
按照我的理解,getline函数直到遇到换行符才会终止从输入流中读取数据,
唯一可能造成这种情况的是2之后的回车,但在getline函数执行前就有
//清空输入缓冲区
cin.clear();
cin.sync();//清空流这样清空输入流缓冲区的操作了啊
是否是因为vs2019的环境特殊或者是c++标准不同抑或是其他我没有注意到的细节原因造成的问题
问题没有时间限制的,什么时候看到都可以来回答,恭候指教哈{:10_297:} 自顶一下,有无老哥解惑{:10_245:} 顶一下 我用DEV运行正常 心驰神往 发表于 2021-1-19 10:24
我用DEV运行正常
是VS的问题吗 昨非 发表于 2021-1-19 11:46
是VS的问题吗
不知道,没用过VS。要不你用DEV试试 心驰神往 发表于 2021-1-19 17:55
不知道,没用过VS。要不你用DEV试试
玄学{:10_243:} {:10_284:} 据我所知, sync 是同步的意思, 功能没有明确定义, 而 clear 是清除错误标识。你根本没有正确清除缓冲区。 {:10_260:}学到....没看懂,我再去复习一遍 永恒的蓝色梦想 发表于 2021-1-25 10:11
据我所知, sync 是同步的意思, 功能没有明确定义, 而 clear 是清除错误标识。你根本没有正确清除缓冲区。
我之前简单的搜了搜
好像Linux系统的sync命令是同步作用
在c++里,cin.sync是清空数据流没错吧
老哥你先看看这个
http://blog.sina.com.cn/s/blog_8d3652760100wl9r.html 昨非 发表于 2021-1-25 16:30
我之前简单的搜了搜
好像Linux系统的sync命令是同步作用
在c++里,cin.sync是清空数据流没错吧
你真正该看的是这个 永恒的蓝色梦想 发表于 2021-1-25 21:31
你真正该看的是这个
这个链接的原文:这个例子说明了 同步 表现为的某些实现 cin,从标准字符输入队列中删除所有未读字符。,说的不就是删除缓冲区中未读入的部分吗?
那应该如何改呢?
例子源自c++ primer的习题集的参考答案
感觉不应该有问题啊?偏偏在vs上就是跑不通 初学者表示没有关注这种问题{:10_266:} 我也没到那种级别 看不懂 昨非 发表于 2021-1-26 19:40
这个链接的原文:,说的不就是删除缓冲区中未读入的部分吗?
那应该如何改呢?
某些实现都说了是某些实现那就不是所有啊,VS不一样不是很正常 永恒的蓝色梦想 发表于 2021-1-28 21:46
都说了是某些实现那就不是所有啊,VS不一样不是很正常
好的,了解了
谢啦
页:
[1]