C++没有显示信息

C++没有显示信息,c++,C++,我试图遍历并输出向量,但除了请求输入外,什么也没发生 int main() { string a; vector<string> test; while (std::cin>>a) { test.push_back(a); } for (vector<string>::iterator i= test.begin(); i!= test.end(); ++i) { std::cout &

我试图遍历并输出向量,但除了请求输入外,什么也没发生

int main() {
    string a;

    vector<string> test;
    while (std::cin>>a) {
        test.push_back(a);
    }
    for (vector<string>::iterator i= test.begin(); i!= test.end(); ++i) {
        std::cout << *i << std::endl;
    }
    system("pause");
    return 0;
}
std::cin>>a将跳过所有空格,并且只将非空格字符放入字符串中。这意味着,除其他外,a将永远不会为空,即使您只需按enter键。所以,即使是一张空支票在这里也对你没有好处。循环将继续,直到您的I/O环境出现问题,即实际上从未出现问题,或者由于向量太大而耗尽内存,在这种情况下,循环通过异常退出

您需要做的是调用std::getline。该函数读取整行输入并在换行后停止,而不是完全忽略换行。然后,您可以检查是否为空,以查看是否未输入任何内容。以下是一个例子:

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::string a;

    std::vector<std::string> test;
    while (std::getline(std::cin, a) && !a.empty()) {
        test.push_back(a);
    }
    for (auto const& s : test) {
        std::cout << s << '\n';
    }
}

我还简化了代码,并冒昧地向您展示了这一点,它们都是不好的想法。

所以您的问题不是跳出while循环,与cout无关?您希望如何从该循环中逃脱:while std::cin>>a?我打算在输入完成时跳出该循环。@JoeyLU:但您的代码不会跳出该循环。你认为什么样的用户行为会导致循环结束?我已经意识到了这个问题。如果按enter键完成循环,我如何修复它?非常感谢。还有一个问题,因为循环在换行后停止,所以似乎没有必要添加空。@JoeyLU:如果删除空检查,那么循环将再次是无止境的,因为std::getline不会仅仅因为输入的字符串为空就将std::cin设置为失败状态。感谢您的进一步帮助explanation@Joey鲁:如果你喜欢这个答案,将其标记为已接受答案。此外,如果您愿意,您可以通过单击答案开头的向上箭头投赞成票。看见