为什么cin.getline开始在body输入的第二行开始工作但是在第一行中断?
示例程序运行:
Enter name: Will
Enter body: hello world
hello again <= It accepts this one
char* name = new char[100];
char* body = new char[500];
std::cout << "Enter name: ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.getline(name, 100);
std::cout << "Enter body: ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.getline(body, 500');
std::cin >> body;
答案 0 :(得分:2)
因为你忽略了cin.ignore语句的第一行。
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
这将忽略整行。
删除它,你就会得到你想要的东西。
您可能还想刷新cout流以确保输出立即打印到屏幕上。在getline之前添加cout.flush();
。
答案 1 :(得分:2)
正如JoshD所说,但另外,你可以节省大量的工作和使用std::string
标题中的std::getline
和<string>
会产生痛苦。
喜欢......
#include <string>
#include <iostream>
int main()
{
using namespace std;
std::string name;
cout << "Enter name: "; getline( cin, name );
}
干杯&amp;第h。,
- Alf