有点困惑为什么我的循环没有结束

A bit confused as to why my loop is not ending

本文关键字:循环 结束 我的 为什么      更新时间:2023-10-16

这是我的代码:

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,但循环仍然没有结束。为什么?

编辑:IDstored_ID都是函数中其他位置的字符串向量。

您多次重新评估bIs_taken(sTemp)

  1. 它在if测试中评估为false,因为您还没有推送ID
  2. 但在while条件下它的计算结果为true,因为您刚刚添加了值

任一

  • 存储第一个返回值并在条件中使用
  • 或者将循环条件简化为while (ID.size() != 10),另外两个是多余的(如果长度无效或id已被占用,则不能达到第十个)

我相信你的问题是ID。size()!=10,因为它只寻找这个值——如果它的11仍然运行,会发生什么。

将其更改为ID。size()<10,带有以上内容!=这在循环中不起作用。。

您可以将整个条件简化为:

while(ID.size() < 10);

由于只有当项目有效时才将其推送到ID上,因此没有理由在while()条件下重复有效性测试。