cin.getline正在跳过一行输入并接下一行

时间:2010-10-09 23:51:40

标签: c++ cin getline

为什么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;

2 个答案:

答案 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