【发布时间】:2017-01-31 07:56:45
【问题描述】:
int main()
{
for (int i = 0; i < 4; ++i)
{
cout << "Please enter Employee #" << (i+1) << "'s" << " name: ";
cin.ignore();
getline(cin, employee[i].employeeName);
cout << "Please enter Employee #" << (i+1) << "'s hours worked: ";
cin >> employee[i].hoursWorked;
cout << "Please enter Employee #" << (i+1) << "'s hourly rate: ";
cin >> employee[i].hourlyRate;
cout << "Please enter Employee #" << (i+1) << "'s Federal Tax Rate: ";
cin >> employee[i].fedtaxRate;
cout << "Please enter Employee #" << (i+1) << "'s State Tax Rate: ";
cin >> employee[i].statetaxRate;
cout << endl;
}
正如标题所说,我目前有cin.ignore(); 来帮助获取像“Barkley, Charles”这样的全名(它做得很好,除了它会截断第一个字符,让我们留下“arkley, Charles”打印)但是当我删除 cin.ignore(); 时,就像 99% 已回答的 StackOverflow 问题一样,什么都没有发生。事实上,它甚至变得更糟:在第二个循环上,它会将第二个循环的第二行放在第二个循环的第一行。这只是一团糟。哦,cin.getline 也不起作用。我尝试将其与cin.sync 结合使用,但没有骰子。普通的普通老香草cin >> 在第一行问题上导致相同的第二行。我不知道该怎么办。我还没有找到涵盖这个(看似)边缘案例的 SO 文章。谢谢您的帮助。
【问题讨论】:
-
假设
ignore调用是在最后一个输入之后读取并丢弃换行符,那么将它放在循环的end怎么样? -
太棒了。谢谢你,伙计。
-
getline不会不删除第一个字符。 之前调用删除它。在那个电话之前,唯一触及std::cin的是对ignore()的电话。
标签: c++ cin getline truncation