0

我有以下代码:

    int data = 0;
    cout << "Enter a number: ";
    cin >> data;
    cout << "You entered " << data << endl;

    string str;
    cout << "Enter a string: ";
    getline(cin,str);
    cout << "Your entered " << str << endl;

在得到第一个提示后,我输入了一个有效的数字 10。但是当我点击返回时,程序输出:

您输入 10 输入一个字符串:您输入

换句话说,它没有要求输入第二个字符串。发生了什么?

谢谢

4

4 回答 4

3
std::cin >> data;

当您输入 的数字data并按下Return键提交您的输入时,将在流中插入一个新行。新行是输入流的默认分隔符,std::getline(std::cin, str)使用时,编译器会看到流中已经有新行,它将停止运行。要解决这个问题,您需要忽略有问题的字符std::cin.ignore

std::cin.ignore();
std::getline(std::cin, str);
于 2013-06-09T02:18:08.950 回答
1

在输入流上混合数字和字符串的经典问题。两者都使用 getline 并使用 stringstream 解析。

于 2013-06-09T02:12:02.420 回答
0

看看下面。问题是读取整数不会在终止换行符中读取。该换行符在您使用时被消耗getline(...),因此您的程序退出。您需要先使用该换行符。

int data = 0;
cout << "Enter a number: ";
cin >> data;
cout << "You entered " << data << endl;

string str;
cout << "Enter a string: ";
getline(cin,str); // consume endline <------------------
getline(cin,str);
cout << "Your entered " << str << endl;
于 2013-06-09T02:18:30.350 回答
0

当您输入 10 时,您实际上是在输入“10\n”,即 10 加上新行。它可能取决于操作系统,但发生的基本想法是 cin 只是从输入缓冲区中读取 10 并留下换行符。然后,当您的程序到达 getline 部分时,getline 从输入缓冲区中读取“\n”。由于 "\n" 是 getline 的默认终止字符,因此 getline 结束并且您的程序继续运行。

因此,在程序结束时,str 只包含“\n”。

于 2013-06-09T02:25:33.433 回答