【问题标题】:Getting null output with both >> and getline even i'm using string whitespaces即使我使用字符串空格,也使用 >> 和 getline 获取空输出
【发布时间】:2020-04-01 06:05:13
【问题描述】:

我正在尝试通过用户使用 >> 或 getline 输入的变量添加变量,但它们都给出了空值。我们知道getline 不会忽略前导空格字符,这就是我使用字符串空格的原因employeeName=" ";string designation=" ";。 谁能帮我获得正确的输出

class Employee{
  public:
  int employeeId,salary;
  string employeeName=" ";
  string designation=" ";
  void getEmployee(){
    cin>>employeeId;
    getline(cin,employeeName);
    getline(cin,designation);
    cin>>salary;
  }
  void ShowEmployee(){
    cout<<"Employee Id="<<employeeId<<"\n";
    cout<<"Employee Name="<<employeeName<<"\n";
    cout<<"Designation="<<designation<<"\n";
    cout<<"Salary="<<salary<<"\n";
  }
};
int main() {
  Employee ob;
  ob.getEmployee();
  ob.ShowEmployee();
}

谁能帮帮我:)

【问题讨论】:

  • 投票结束为错字。您忘记调用 getEmployee() 并且实际上并没有将变量输出到您的 cout&lt;&lt; 语句中(salary 除外)。
  • 对不起,我忘记了那些东西,请检查编辑后的代码,请帮助我获得正确的输出。
  • 如果您也可以发布您的输入文本会有所帮助。
  • 是的,我已经上传了,请检查一下

标签: c++ string getline


【解决方案1】:

但在您的示例中,您没有调用 getEmployee。你忘了吗?

您也可以尝试将 std::istream& 传递给它的构造函数

Employee(std::istream& in) {
  in >> this->employeeId;
  in >> this->salary;
  ....
}

【讨论】:

  • 对不起,我忘记在这里调用 getEmployee,我也尝试使用 'this' 构造函数,但它给出相同的空值。请检查编辑的代码并帮助我。
  • 没问题。对于一种非常快速且非常肮脏的方法,您可以使用 cin.ignore();在您的第一个 std::geline(...) 之前,这将允许输入以 NL 结尾的行。
  • 正如@Kaldrr 之前指出的那样,最好不要混合运算符 >> 和 getlline() 看起来您可以使用 getline 将所有信息读取到 std::string 并转换那些需要改为数字。例如使用这种方法std:stringstream
【解决方案2】:

您永远不会调用getEmployee 成员函数。 由于您的Employee 对象是在堆栈上创建的,而employeeIdsalary 未初始化,因此它们内部包含垃圾值。

ShowEmployee 成员函数中,您只输出salary 变量值,所以我猜这并不是您自己编译和测试的代码。

至于您使用getline 的原因,我完全不明白,作为第二个参数传递的字符串将被覆盖,因此在调用之前其中的任何内容都会丢失。但是如果你想像你一样在同一个流上混合operator&gt;&gt;getline调用,你需要使用 ignore,因为operator&gt;&gt;不会从流中提取'\n',这将被读取getline.

【讨论】:

    【解决方案3】:
    getline(cin,employeeName);
    getline(cin,designation);
    

    在上面的代码中,您将覆盖字符串,如果您想混合用户输入的多种数据类型,请尝试在您的第一个 std::getline(...) 之前使用 cin.ignore;

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多