马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 昨非 于 2021-1-28 21:55 编辑
题目要求是:比较string类的输入运算符和getline函数对带有空白字符的字符串的处理差异
测试输入为(前中后都有空格):
参考代码如下:/*
两种字符串读取的方式对空白字符处理的差异:
标准输入忽略开头的所有空白,从第一个字符读到下一个空白
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++标准不同抑或是其他我没有注意到的细节原因造成的问题
|