【问题标题】:C++ value updating/ignoringC++ 值更新/忽略
【发布时间】:2014-09-13 04:42:15
【问题描述】:

所以我有这个

int main(){
  string input;
  string lastName;
  string firstName;
  int age;
  int streetNum;
  string streetName;
  string town;
  string zipCode;
  float balance;
  Update(lastName, firstName, age, streetNum, streetName, town, zipCode, balance);
}

这里是更新函数

void Update(string &lastname, string &firstname, int &age, int &streetnum, string &streetname, string &town, string &zipcode, float &balance){
  cout << "Update the following, enter nothing to leave the same: " << endl;
  string input;

  cout << "Last name: ";
  getline(cin, input);
  if (input != "\n") { lastname = input; }

  cout << "First name: ";
  getline(cin, input);
  if (input != "\n") { firstname = input; }

  cout << "Age: ";
  getline(cin, input);
  if (input != "\n") { age = atoi(input.c_str()); }

  cout << "Street number: ";
  getline(cin, input);
  if (input != "\n") { streetnum = atoi(input.c_str()); }

  cout << "Street name: ";
  getline(cin, input);
  if (input != "\n") { streetname = input; }

  cout << "Town name:";
  getline(cin, input);
  if (input != "\n") { town = input; }

  cout << "ZipCode: ";
  getline(cin, input);
  if (input != "\n") { zipcode = input; }

  cout << "Balance: ";
  getline(cin, input);
  if (input != "\n") { balance = atof(input.c_str()); }

}

如果输入是“\n”,我的目标是更新值或跳到下一个值。

一旦运行并且程序调用更新,它会在同一行打印出“姓氏:名字:”,而不会让用户在姓氏中输入任何内容。我不知道为什么会这样。任何提示或进入方向的线索都会有所帮助。

【问题讨论】:

  • 我似乎无法用您提供的代码重现您的问题。也许有一个\n“卡在”cin 中,您没有在代码中的其他地方处理?
  • 您在某处使用过cin &gt;&gt; 吗?看起来像尾随换行问题
  • 是的,我还有另一个类似于 Update() 的函数。唯一的区别是它 Update 可以跳过输入。什么是尾随换行问题?
  • 要了解尾随换行问题,请查看*.com/questions/6642865/…
  • if (input != "\n") { lastname = input; } 输入将永远等于"\n",因为getline() 删除了"\n" 字符。您可以改用if(!input.empty()),但您可能想寻找一个函数来删除任何可能被错误输入的空格。

标签: c++ parameter-passing cin getline


【解决方案1】:

getline() 不等待用户输入。我相信除非你被告知使用 getline() 你可能想要使用 cin。看起来像这样:

cout<< "Lastname: ";
cin>>input;
if(input != " ")
{
    lastname= input;
}

我预见到的唯一问题是您将无法使用 '\n' 作为 if 语句的条件。在上面的示例中,我使用空格作为跳过字符。

【讨论】:

  • 我认为他正在使用cin。他只是将cin 传递给getline。他的代码对我有用。
  • getline() 确实等待用户输入。在用户输入之前它不能get 任何东西,如果用户没有输入任何东西,它就会阻塞并等待。