即使我使用字符串空格,也使用 >> 和 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<<
语句中(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
对象是在堆栈上创建的,而employeeId
和salary
未初始化,因此它们内部包含垃圾值。
在ShowEmployee
成员函数中,您只输出salary
变量值,所以我猜这并不是您自己编译和测试的代码。
至于您使用getline
的原因,我完全不明白,作为第二个参数传递的字符串将被覆盖,因此在调用之前其中的任何内容都会丢失。但是如果你想像你一样在同一个流上混合operator>>
和getline
调用,你需要使用 ignore
,因为operator>>
不会从流中提取'\n'
,这将被读取getline
.
【讨论】:
【参考方案3】:getline(cin,employeeName);
getline(cin,designation);
在上面的代码中,您将覆盖字符串,如果您想混合用户输入的多种数据类型,请尝试在您的第一个 std::getline(...) 之前使用 cin.ignore;
。
【讨论】:
以上是关于即使我使用字符串空格,也使用 >> 和 getline 获取空输出的主要内容,如果未能解决你的问题,请参考以下文章