输入内部 while 和向量
Input inside while and 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的书"使用c++的编程,原理和实践"。我使用了我在书中找到的代码,但是当我运行代码时,while循环似乎永远不会结束。 cin>>temp可能有什么问题; ?编辑: 当我运行程序时,while 循环似乎永远不会停止。我尝试过"失败"将字符串作为输入,以便cin>>temp;也会失败。 但是,无论我输入的数据类型如何,cin 似乎都不会失败。在stroustrup的书中,代码就是这样,这很奇怪,因为我遇到了无法确定的逻辑错误。 当我输入字符串以外的内容时,程序应该停止。然后while循环条件将失败,循环将结束,for循环将开始,给我留下一个不错的向量和一些字符串。 谢谢你的时间。
使用
if((words[i] != disliked && words[i-1]!=words[i]) || i==0)
是一个问题,因为i == 0
是||
的第二句。 在您检查之前,将访问words[-1]
,这会导致未定义的行为。
将其更改为:
if( (words[i] != disliked) && (i == 0 || words[i-1] != words[i]))
若要使代码更具可读性,请使用{}
使块的范围更清晰一些。
int main()
{
vector<string>words;
string temp,disliked;
disliked = "left";
cout << "bam" << endl;
while(cin>>temp)
{
words.push_back(temp);
}
cout << "bam" << endl;
for(int i=0; i<words.size(); i++)
{
if ( (words[i] != disliked) && (i == 0 || words[i-1] != words[i]) )
{
cout << words[i] << endl;
}
}
return 0;
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- C++ 制作/命名不初始化的向量(在 while 循环中)
- 如何引用或调用在 c++ 中的其他 while 循环中创建的向量?
- 输入内部 while 和向量
- 如何在 while-loop 中重新初始化向量
- 无限循环 C++,带有 while 和对向量
- while(getline(myReadFile, temp, ':')) 执行一次迭代太多导致向量越界
- 使用do while擦除一个向量中的元素并将其添加到另一个向量
- 初学者在C++中对向量和while循环有困难
- 将字符串转换为双精度值,然后在 While 循环中将其推送到向量
- 向量为空,尽管已在while循环中填充了成员
- 在C++中使用do-while循环对向量的元素求和
- 使用scanf和while循环与向量push_back
- 尝试使用while循环取消分配向量,任务管理器显示内存使用正在增加
- 从文件中读取向量、结构和While循环
- c++向量数组/ while循环