C++ getline(), 第二次运行这个函数不起作用

标签 c++ input getline

我不知道我的简单 IO 问题是什么:

这是我执行 IO 的代码:

cout << "Enter an Employee name: ";
getline(cin, empName);
cout << "Employee Position: "  ;
cin >> empPos;
cout << "Enter the Number of Years of Experience: ";
cin >> numOfExp;
cout << "Enter the deprtment Number: ";
cin >> deptNum;

这是我的错误输出: 第一次读取名称时一切正常,但第二次似乎自动将某些内容传递到名称中,而不要求用户输入名称的任何内容。

这是我的输出:

Name:               Unknown
Department Number:          0
Employee Position:          E
Years of Experience:        0
Salary:                     0
Total Number of Employees:  1
Enter an Employee name: arasd d
Employee Position: s
Enter the Number of Years of Experience: 12
Enter the deprtment Number: 12
Name:                       arasd d
Department Number:          12
Employee Position:          s
Years of Experience:        12
Salary:                     0
Total Number of Employees:  1
Enter an Employee name: Employee Position:

如您所见,最后一行是问题所在; 知道如何解决这个问题吗?

最佳答案

问题可能是你在 std::getline() 之前读到的最后一个东西是一个整数(或者使用 operator>>() 的其他东西)。格式化输入运算符在遇到第一个与其格式不匹配的字符时停止读取。例如,整数读取在输入非数字(前导符号除外)时停止。因此,在读取整数后使用换行符指示输入完成仍在输入缓冲区中。

要处理卡住的换行符,您可以在插入 std::getline() 之前跳过任何前导空格:

if (std::getline(std::cin >> std::ws, name)) {
    ...
}

顺便说一句,从来没有您不想检查用户输入的情况!用户输入总是需要检查,即使是在假设输入是正确的最普通的程序中也是如此!它有助于显着定位实际问题。鉴于您的输出,看起来 tve 输入实际上与正在读取的内容不匹配......

关于C++ getline(), 第二次运行这个函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13326408/

相关文章:

c++ - MinGW的Qt getline错误

c++ - 如何只用一个#define 定义两个或多个值?

Python defaultdict(dict) 中一个键有多个值

html - 将 <label> 文本放置在文本输入的边框内

C++ 帮助 - getline

c++ - 没有匹配的函数来调用 getline()

c++ - 使用内联函数有什么问题?

c++ - 意外的 MPI 地址偏移

c++ - 另一个模板(同一类)的模板特化

Jquery .change() 函数在本地主机上不起作用