多个字符串存储在不同的变量C++中

Multiple string store in different variable C++

本文关键字:变量 C++ 字符串 存储      更新时间:2023-10-16

这是我第一次在这里发帖,所以我会尽量澄清我的问题。所以我需要在变量中存储不同的带空格的字符串。我正在处理eclipse,我遇到了一个问题。

这是代码

using namespace std;
string p_theme;   
string p_titre;
int p_anneeEdition;
string p_pays;
string p_auteur;
string p_editeur;
string p_isbn;
cout << "Veuillez saisir le thème:" << endl;
getline(cin, p_theme, 'n');

cout << "Veuillez saisir le titre:" << endl;
getline(cin, p_titre, 'n');
....

这就是控制台向我显示的内容

Veuillez saisir le thème:
Veuillez saisir le titre:

问题是我没有时间在第二个cout之前输入字符串"Theme"。我尝试了不同的方法,使用字符缓冲区,但它不起作用,我在循环中输入。

一个什么都不做的getline可能有很多原因
  • 设置了故障位(因为读取int或类似内容失败),在这种情况下,从cin读取的所有调用都将被忽略
  • 输入缓冲区中还有未读字符。例如"\n"(如果您用operator>>读取std::string,则可以是)

要处理这两种情况,请插入

cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), 'n'); 

在每次调用getline之前(并在文件顶部添加#include <limits>)。

这肯定是一种过度杀戮,如果你小心的话,这是可以减少的。

  • 检查每个输入是否成功(如int i; if (std::cin >> i) { /* ok */ }
  • 不要在没有getline的情况下读取std::string(例如operator>>),除非您稍后调用cin.ignore(...)

如果你完成了所有这些,代码应该可以像你已经拥有的那样工作。