-3

我们不能在循环中使用 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() 被跳过?

提前致谢。

4

2 回答 2

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() not working”无关,并且您发布的代码也没有表现出来。投票结束问题。

于 2012-08-30T13:07:02.423 回答
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循环的条件检查测试两个连续的行提取是否成功,如果不成功(例如,如果文件流已到达末尾),则循环中断。

于 2012-08-30T13:11:31.857 回答