我们不能在循环中使用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()?
提前致谢。
答案 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
循环的条件检查测试两个连续的行提取是否成功,如果没有(例如,如果文件流已到达结束),则循环中断。