2

为什么 cin.getline 开始在正文输入的第二行工作,但在第一行中断?

示例程序运行:

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;
4

2 回答 2

2

因为您忽略了 cin.ignore 语句的第一行。

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

这将忽略整行。

删除它,你会得到你想要的。

您可能还想刷新 cout 流以确保您的输出立即打印到屏幕上。cout.flush();在您的 getline 之前添加一个。

于 2010-10-09T23:53:24.967 回答
2

std::string正如 JoshD 所说,但另外,您可以通过使用标头中的和std::getline来节省大量工作和痛苦<string>

喜欢 ...

#include <string>
#include <iostream>
int main()
{
    using namespace std;
    std::string name;
    cout << "Enter name: ";  getline( cin, name );
}

干杯&hth.,

– 阿尔夫

于 2010-10-09T23:58:44.180 回答