cin.getline()未按预期工作

时间:2012-08-30 12:33:57

标签: c++ getline cin

我们不能在循环中使用cin.getline()吗?我正在运行以下代码:

for(int k=0; k<t; k++)
{
    char ph1[1000], ph2[1000], ph11[1000], ph22[1000][1000];
    int i, j, count = 0;

    cin.getline(ph1, 1000);
    cin.getline(ph2, 1000);
}

代码应该通过cin.getline()接受两个字符串(或char *)。但是当我运行它时,它接受第一个字符串,打印“NO”并退出。为什么会这样?为什么跳过第二个cin.getline()?

提前致谢。

2 个答案:

答案 0 :(得分:0)

即使您编辑了它,您的示例代码仍然也无法编译。这是一个没有围绕main()的循环。

我把它改写成:

#include <iostream>
#include <cstdio>

int main()
{
    char ph1[1000], ph2[1000];

    std::cin.getline(ph1, 1000);
    std::cin.getline(ph2, 1000);

    std::cout << "ph1: '" << ph1 << "' - ph2: '" << ph2 << "'" << std::endl;

    return 0;
}

这可以按预期工作,即您感知的问题与“cin.getline()无效”无关,并且您发布的代码不会显示。投票结束这个问题。

答案 1 :(得分:0)

可能想要这样的东西:

for (std::string l1, l2;
     std::getline(std::cin, l1) && std::getline(std::cin, l2); )
{
    std::cout << "Your first line: '" << l1
              << "'\nYour second line: '" << l2 << "'\n";
}

如果执行的输入操作的返回值不是在布尔上下文中立即使用,那么总是认为它是一个困难的编程和逻辑错误。在我的示例中,for循环的条件检查测试两个连续的行提取是否成功,如果没有(例如,如果文件流已到达结束),则循环中断。