C++ 为什么还剩下输入缓冲区?
c++ why is there still input buffer left?
在我的第一个条目之后,我的第二个输入name
字段被上一个条目的输入缓冲区填满。为什么?我什至正在使用getline
但问题仍然存在。请帮助我解决问题。这是《跳进书C++》中的问题。
#include <iostream>
#include <string>
using namespace std;
struct Person
{
string name;
string address;
long long int PhoneNumber;
};
void displayEntries(Person p[])
{
int enteryNumber;
cout << "Enter the entry number of the person for details(enter 0 to display all entries): ";
cin >> enteryNumber;
if(enteryNumber == 0)
{
for(int i = 0; i < 10; i++)
{
cout << "Entery Number: " << i + 1;
cout << "Name: " << p[i].name << endl;
cout << "Address: " << p[i].address << endl;
cout << "Phone Number: " << p[i].PhoneNumber << endl;
}
}
do
{
cout << "Entery Number: " << enteryNumber;
cout << "Name: " << p[enteryNumber].name << endl;
cout << "Address: " << p[enteryNumber].address << endl;
cout << "Phone Number: " << p[enteryNumber].PhoneNumber << endl;
} while (enteryNumber != 0);
}
int main()
{
Person p[10];
for(int i = 0; i < 10; i++)
{
cout << "Enter the details of the personnn";
cout << "Name: ";
getline(cin, p[i].name);
cout << "Address: ";
getline(cin, p[i].address);
cout << "Phone Number: ";
cin >> p[i].PhoneNumber;
cout << endl;
}
displayEntries(p);
return 0;
}
当您阅读getline的参考时,您可以看到发生了什么:
在空格分隔的输入之后立即使用时,例如在
int n;
std::cin >> n;
getline(cin, n); //if used here
getline
使用operator>>,
留在输入流上的结束行字符并立即返回。一种常见的解决方案是忽略输入行上的所有剩余字符
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
在切换到面向线路的输入之前。
cin >> p[i].PhoneNumber;
只获取数字。这样,仍然在输入缓冲区中结束的行将在下次尝试读取一行时读取。
相关文章:
- 清除输入缓冲区后未提取字符串流
- 快速读取标准输入缓冲区,无需检查
- C++ 为什么还剩下输入缓冲区?
- 如果输入缓冲区不为空,请使用getchar.()检测Ctrl+d
- 如果我在 C++ 中为 int 提供双精度,输入缓冲区中存储了什么?
- 如何重复使用原始输入缓冲区内存?
- 从输入缓冲区读取
- 安全操作以清除C++中的空输入缓冲区
- 如何检查输入缓冲区是否为空
- 我可以做一个循环,直到“std::cin”在输入缓冲区中看到“”字符
- 是否可以在键盘输入缓冲区中向前看并在MFC/Win32中检测条形码条目
- fftwf_execute_dft_c2r写入输入缓冲区
- 如何在C 中清除输入缓冲区
- cin.clear() 如何清除输入缓冲区
- C++清除输入缓冲区(最后没有换行符)
- 输入缓冲区错误或其他原因
- Linux 串行端口读取 - 我可以更改输入缓冲区的大小吗?
- 清除输入缓冲区中的所有其他字符
- 如何在获得下一个字符后正确刷新输入缓冲区,而无需按两次回车键!C++
- 清除包括换行符在内的输入缓冲区