【发布时间】:2017-05-18 20:01:53
【问题描述】:
这是 vectors 的新手方法。以下程序非常简单,但我不明白我做错了什么。它很小,所以我相信阅读它不会有麻烦。它应该创建一个向量并向其添加字符串。然后在屏幕上打印字符串。如果字符串已被打印,它会跳过它并转到下一个。此外,如果字符串是不喜欢的单词之一(在这种情况下只有单词“left”),那么它也会跳过它。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<string>words;
string temp,disliked;
disliked = "left";
while(cin>>temp)
{
words.push_back(temp);
}
for(int i=0; i<words.size(); i++)
{
if(( i==0 || words[i] != disliked && words[i-1]!=words[i]))
{
cout << words[i] << endl;
}
}
return 0;
}
这个程序来自 Stroustrup 的书“Programming, principle and practice using c++”。我使用了我在书中找到的代码,但是当我运行代码时,while 循环似乎永远不会结束。 cin>>temp 可能有什么问题; ? 编辑: 当我运行程序时,while 循环似乎永远不会停止。我尝试“失败”将字符串作为输入,这样 cin>>temp; 也会失败。 但无论我作为输入输入的数据类型如何,cin 似乎都不会失败。在 stroustrup 的书中,代码完全一样,这很奇怪,因为我遇到了我无法查明的逻辑错误。 当我输入字符串以外的内容时,该程序应该停止。然后 while 循环条件将失败,循环将结束并且 for 循环将开始,给我留下一个不错的向量和一些字符串。 感谢您的宝贵时间。
【问题讨论】:
-
欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
-
while(std::cin >> temp)将循环直到std::cin没有失败。所以你显然没有触发std::cin的失败条件,这可能是文件结束失败、其他一些读取失败或一些意外的流字符 -
"cin>>temp; 有什么问题?" 它到底出了什么问题?请提供一个minimal reproducible example 来重现您的问题。
-
您似乎缺少正确的范围界定。使用
{}块将所有应在while()循环中执行的语句。 -
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该在edit 您的问题中包含一个重现您的问题的Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。