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

时间:2013-12-14 03:43:07

标签: c++ loops while-loop do-while

所以这是我的代码:

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.\n\n";
    else if(bIs_taken(sTemp))
        cout << "Invalid input. ID number cannot be the same as a previous member.\n\n";
    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时,为什么循环不会退出?

我在每次循环运行后通过ID.size()测试cout大小,并且在第10次有效ID输入后确实达到了大小10,但循环仍未结束。为什么呢?

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

3 个答案:

答案 0 :(得分:0)

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

将其更改为ID.size()&lt; 10,用上面的!=在循环中不起作用..

答案 1 :(得分:0)

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

while(ID.size() < 10);

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

答案 2 :(得分:0)

您多次重新评估bIs_taken(sTemp)

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

    • 存储第一个返回值并在条件
    • 中使用它
    • 或将您的循环条件简化为while (ID.size() != 10),其他两个是冗余的(如果长度无效或已经使用了id,则无法达到第十个)