避免在空格分隔输入后忽略()

Avoid ignore() after whitespace-delimited-input?

本文关键字:输入 空格 分隔      更新时间:2023-10-16
  1. 如何在空格分隔的输入后显示剩余字符?或者,如果这个问题问错了,我怎么知道他们躲在那里,需要被忽略?

  2. 我必须怎么做才能避免使用cin.ignore()?我试图学习如何使用get()getline().似乎它们只有在我首先使用cin.ignore()时才有效,这对我来说似乎效率低下。

我的代码提示我输入一个数字,看起来很像这样:

int previousVar;
std::cout<<"ntWhat value should previousVar be?:t";
std::cin>>previousVar;

紧接着,我添加了以下代码(从 cpp 参考网站复制粘贴(:

std::string name;
//std::cin.ignore();
std::cout << "Please, enter your full name: ";
std::getline (cin, name);
std::cout << "Hello, " << name << "!n";
cin>>beforeExit;

我的代码完全跳过了名称收集部分,直到程序结束暂停,除非我有cin.ignore()。我在其中一个 cpp 参考页面上读到,我可能有以前cin输入的剩余字符。我在 http://www.cplusplus.com/forum/beginner/111268/以及cin.get((和cin.getline((之间的差异上看到了类似的问题,但我不确定他们问的是和我一样的事情。

std::cin>>previousVar不会提取读取int之后的字符,其中包括换行符。因此,如果您不使用 std::cin.ignorestd::getline (cin, name)将立即由于这个换行符而结束。

为避免std::cin.ignore,您可以在第一次读取中使用std::getline,这将提取换行符:

std::string previousVarStr;
std::cout << "ntWhat value should previousVar be?:t";
std::cin >> previousVarStr;
auto previousVar = std::stoi(previousVarStr); // or (in C++17) use std::from_chars if you care about the performance

或者在第二次读取中使用>>,这将忽略前导空格:

std::string name;
std::cout << "Please, enter your full name: ";
std::cin >> name;
std::cout << "Hello, " << name << "!n";