getline(cin,aString)接收输入而不输入另一个值
getline(cin, aString) receiving input without another enter
我的代码看起来像这样,
string aString;
cin >> aString;
cout << "This is what cin gets:" << aString << endl;
getline(cin, aString);
cout << "This is what getline(cin, <string>) gets:" << aString << endl;
每次运行它时,我都会输入"12"、"12"answers"。
我想知道为什么getline会在没有用户输入的情况下接收。
我可以理解,当我输入类似"12 24"的东西时,cin会得到"12",而getline应该得到其余的
刚从C++上的字符串开始,所以请不要太难。谢谢你。
当您将标准流提取与getline混合时,有时会让getline返回空字符串。原因是,如果使用>>读取输入,则用户输入的换行符不会从输入流中删除,以表示完成了输入。因此,当您调用getline时,函数将读取剩余的换行符并返回空字符串。
要解决此问题,请始终使用getline进行输入,或者使用ws流操纵器在读取后提取额外的空白:
cin >> value >> ws;
这将吃掉换行符,从而解决问题。
希望这能有所帮助!
这就是我得到的:
std::string str;
std::cin >> str; //hello world
std::cout << str; //hello
这是因为流操作员在空白上标记
std::string str;
std::getline(std::cin, str); //hello world
std::cout << str; //hello world
如果得到整行,getline()将一直工作到找到行的第一个末尾,并将该值作为字符串返回。
然而,在标记化时,如果流中还剩下字符(例如'\n'),那么在调用getline时会访问这些字符,则需要清除流。
std::cin.ignore();
"cin>>x"不使用输入流中的换行符,因此使用getline检索的下一行将包含一个空字符串。解决此问题的一种方法是使用getline逐行检索输入,并使用字符串流标记每一行。从字符串流中提取所有输入后,关键是调用字符串流:clear()来清除字符串流上设置的EOF标志,以便稍后在代码中重用它。
这里有一个例子:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
string line;
stringstream ss;
getline(cin, line);
ss << line;
int x, y, z;
//extract x, y, z and any overflow characters
ss >> x >> y >> z >> line;
ss.clear();
//reuse ss after clearing the eof flag
getline(cin, line);
ss << line;
//extract new fields, then clear, then reuse
//...
return 0;
}
根据每个输入行的长度,一次获取整行并在内存中处理它可能比对要从标准输入中提取的每个令牌执行控制台IO更高效。
相关文章:
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++ 如何打开带有另一个目录的输入文件?
- 一个变量的输入值也会保存到另一个变量中
- 如何使用函数将一个对象的输入复制到另一个对象中
- 如何设置默认参数以防用户不输入另一个参数
- C++ 如何根据作为输入传递的参数调用一个构造函数或另一个构造函数?
- 在一个子程序中输入的变量用于C++中的另一个子程序
- 使用 (cin) 用户输入将其粘贴到 std::system 中,并在另一个终端中运行带有输入的命令
- 为什么在我的程序中输入另一个输入会给我不同的结果
- GoogleMock:如何根据另一个输入参数设置ArgReferee?
- 如何在 eclipse 中将标准输入从控制台更改为另一个程序
- 如何从C++的输入中查找字符串并将其替换为另一个字符串
- 如何将文件复制到另一个文件中,但是用用户输入的单词替换单词
- C 将用户输入从一个函数到另一个功能,并使用Main(Newbie)显示
- 如何从另一个线程停止 std::cin 再读取输入?
- C++:为什么这个字符串输入失败,而另一个没有
- "cin.get"停止了另一个输入函数,如"cin"..C++
- 只有当输入文件确实包含要读取的另一个值时,我才能让getline(variable,n)运行
- 如何在C 中的另一个对象的同一数据成员中输入另一个字符串
- getline(cin,aString)接收输入而不输入另一个值