【发布时间】:2016-05-01 17:48:23
【问题描述】:
我想在这个 C++ 程序中输入字符串,但是下面的代码不起作用。它不会将员工的姓名作为输入。它只是跳过。抱歉,我是 C++ 新手。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int empid;
char name[50];
float sal;
cout<<"Enter the employee Id\n";
cin>>empid;
cout<<"Enter the Employee's name\n";
cin.getline(name,50);
cout<<"Enter the salary\n";
cin>>sal;
cout<<"Employee Details:"<<endl;
cout<<"ID : "<<empid<<endl;
cout<<"Name : "<<name<<endl;
cout<<"Salary : "<<sal;
return 0;
}
【问题讨论】:
-
std::getline。但是将std::cin >> foo与getline的任何一种形式混合使用是很棘手的,最好避免,因为它们以不同的方式处理换行符,并且相互混淆。我发现最好一次读取一行,然后在程序中处理每一行。 -
感谢您的回答。你能告诉我为什么 cin.getline() 语法不起作用吗?
-
std::cin.getline()要求您自己管理缓冲区,这总是比较棘手。例如,如果您的用户有一个长名称怎么办?std::string name; std::getline(std::cin, name);为您处理此问题。至于为什么您当前的版本不起作用:cin>>empid在流中留下一个尾随的\n字符,getline在看到名称之前看到 before。所以你阅读了上一行的结尾,而不是你真正想要的那一行。不要混合两种阅读方式,这是一个 PITA。