即使我使用字符串空格,也使用 >> 和 getline 获取空输出

Posted

技术标签:

【中文标题】即使我使用字符串空格,也使用 >> 和 getline 获取空输出【英文标题】:Getting null output with both >> and getline even i'm using string whitespaces 【发布时间】: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++ getline() isn't waiting for input from console when called multiple times。 对不起,我忘记了那些东西,请检查编辑后的代码,请帮助我获得正确的输出。 如果您也可以发布您的输入文本会有所帮助。 是的,我已经上传了,请检查一下 【参考方案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;

【讨论】:

以上是关于即使我使用字符串空格,也使用 >> 和 getline 获取空输出的主要内容,如果未能解决你的问题,请参考以下文章

即使输入无效,表单也会提交

正则表达式:匹配字母数字和空格,但前导空格除外

使用 fstream 读取每个字符,包括空格和换行符

即使使用示例代码,mmenu 也无法正常工作

即使我已经在控制器中解码了数组,字符串偏移也是非法的?

Python去除字符串的空格