getline 不允许我输入多行输入

getline doesn't allow me to enter multiple lines for input

提问人:YWH 提问时间:7/23/2023 更新时间:7/24/2023 访问量:55

问:

我正在编写一个程序,该程序旨在从输入中获取一个整数 N,然后读取 N 行数。 但是,在运行时,它允许我输入 N,然后输入第一行,然后立即结束,而无需等待下一行。例如,如果我输入

3
Line 1
Line 2
Line 3

然后输出是 ,在我输入后立即发生,这表明它正在完成循环。 如何让它从我的控制台输入中读取更多行?看看其他问题和答案,它们似乎都源于混合的使用,但我在这里避免了这一点,但仍然有问题。line entered no. 3: Line 1Line 1cin >> vargetline()

如果是控制台的问题,我在 Win10 上使用 Powershell。

#include <iostream>
#include <string>
using namespace std;

int main(void){
    int N, i;
    string inptstr, temp;

    getline(cin, temp);
    N = stoi(temp);

    for (i = 0; i < N; i++);
        getline(cin, inptstr);
        cout << "Line entered no. " << i << ": " << inptstr << endl;
    
    return 0;
}
C++ getline

评论

1赞 Andreas Wenzel 7/23/2023
紧随其后是故意的吗?如果您启用了足够高的警告级别,大多数编译器都会对此发出警告。您可能想阅读以下内容:为什么我应该始终启用编译器警告?;for (i = 0; i < N; i++)
0赞 YWH 7/23/2023
啊,不错的收获,似乎已经解决了,谢谢!也感谢您如何打开警告。有专制的人可以关闭这个问题吗?
0赞 Andreas Wenzel 7/23/2023
在 Stack Overflow 上,将问题标记为已解决的正确方法是接受答案(您已经这样做了)。问题不应该仅仅因为问题已经解决而关闭。例如,有人可能想发布一个更好的答案,如果问题已经关闭,这是不可能的。
0赞 YWH 7/23/2023
我明白了,谢谢!以前我确实关闭了一个问题,因为它是由于拼写错误,我认为这次是这种情况
1赞 Pete Becker 7/23/2023
投票决定重新开放。此问题不是由拼写错误引起的。这是由于对 C++ 语法的根本误解引起的。关闭选民的注意事项:如果你或我写了它,那将是一个错别字,但这并不意味着它对初学者来说是一个错别字。试着回想一下你刚开始时有多困惑。

答:

2赞 Andreas Wenzel 7/23/2023 #1

循环

for (i = 0; i < N; i++);
    getline(cin, inptstr);
    cout << "Line entered no. " << i << ": " << inptstr << endl;

是错误的。请注意,您有一个紧随其后的 .这意味着此代码等效于以下内容:;for (i = 0; i < N; i++);

for (i = 0; i < N; i++)
{
}

getline(cin, inptstr);
cout << "Line entered no. " << i << ": " << inptstr << endl;

换句话说,你的循环实际上什么也没做。

您想要的可能如下:

for (i = 0; i < N; i++)
{
    getline(cin, inptstr);
    cout << "Line entered no. " << i << ": " << inptstr << endl;
}

评论

0赞 YWH 7/23/2023
是的,这似乎奏效了,谢谢!