有点困惑为什么我的循环没有结束
A bit confused as to why my loop is not ending
这是我的代码:
int k = 1;
string sTemp = "";
do {
cout << "Enter the ID number for sequence " << k << ": ";
cin >> sTemp;
if(!bValid_digit(sTemp))
cout << "Invalid input. ID number must be 3 digits long.nn";
else if(bIs_taken(sTemp))
cout << "Invalid input. ID number cannot be the same as a previous member.nn";
else {
k++;
ID.push_back(sTemp);
stored_ID.push_back(sTemp);
}
}
while(bIs_taken(sTemp) || !bValid_digit(sTemp) || ID.size() != 10);
我在那里所做的是获得一个3位ID成员的用户输入,我有一个单独的函数bValid_digit()
,它工作得很好;然后我使用函数bIs_taken()
测试ID号是否已经被取下,这也很好;然后我在do while循环的条件下测试ID.size() != 10
,因为我只想让用户输入10个ID号,这就是问题所在。为什么ID.size()
达到10时循环没有退出?
我在每次循环运行后通过cout
来测试ID.size()
的大小,在第10个有效ID输入后,它确实达到了大小10,但循环仍然没有结束。为什么?
编辑:ID
和stored_ID
都是函数中其他位置的字符串向量。
您多次重新评估bIs_taken(sTemp)
:
- 它在if测试中评估为false,因为您还没有推送ID
- 但在while条件下它的计算结果为true,因为您刚刚添加了值
任一
- 存储第一个返回值并在条件中使用
- 或者将循环条件简化为
while (ID.size() != 10)
,另外两个是多余的(如果长度无效或id已被占用,则不能达到第十个)
我相信你的问题是ID。size()!=10,因为它只寻找这个值——如果它的11仍然运行,会发生什么。
将其更改为ID。size()<10,带有以上内容!=这在循环中不起作用。。
您可以将整个条件简化为:
while(ID.size() < 10);
由于只有当项目有效时才将其推送到ID上,因此没有理由在while()
条件下重复有效性测试。
相关文章:
- 为什么在这个代码结束循环中没有得到结束
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 使用 shared_ptr 在中断时结束多线程循环
- 如何使用循环结束 c++ 上的行
- 具有迭代器和自定义步长的循环结束条件
- 为什么这个 while 循环在下面的代码中没有结束?
- 为什么在使用不相关的宏时会阻止 while 循环结束?
- 为什么我的 while 循环永远不会在 C++ 中的数字猜测游戏中结束?
- while 循环 C++ 结束,但不继续到其余语句
- 为什么循环结束时不这样做?
- 向量中指针的前半部分在循环结束后被重新分配
- For 循环结束自身并终止正在运行的程序,但在删除斜率计算语句时正常运行
- 有没有一个C++版本在循环结束后将在for循环初始化中声明的变量保留在作用域中
- 数组循环在循环结束后输出垃圾
- C++ - 如果在循环中声明对象,是否在循环结束时调用其析构函数
- Dlsym以无限循环结束
- 为什么我总是以无限循环结束
- 崩溃控制台应用程序,在循环结束时.寻求建议.(图片在里面)
- 在while循环结束时清除c++字符串
- Vector迭代器+偏移量超出范围,在while循环结束时给出错误