【问题标题】:A bit confused as to why my loop is not ending有点困惑为什么我的循环没有结束
【发布时间】:2013-12-14 03:43:06
【问题描述】:

这是我的代码:

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时循环不退出?

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

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

【问题讨论】:

  • 链接到代码通常是不好的形式,而不是将其包含在您的问题中。此外,如果您使用语言(C++?)进行标记会有所帮助。

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


【解决方案1】:

您多次重新评估bIs_taken(sTemp)

  1. 它在 if 测试中评估为 false,因为您尚未推送 ID
  2. 但它在 while 条件下评估为 true,因为您刚刚添加了值

要么

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

【讨论】:

    【解决方案2】:

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

    将其更改为 ID.size()

    【讨论】:

    • @Joe Z...没错,但你知道我想说什么...我们给出了几乎相同的答案 :)...不错的选择!
    • 是的!我们确实做到了! :-)
    【解决方案3】:

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

    while(ID.size() < 10);
    

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

    【讨论】:

    • 将其更改为 ID.size() i.imgur.com/o0Hv6tM.png
    • 不知道该告诉你什么。尝试打印出ID.size(),看看它是否在做你认为应该做的事情。
    • 我刚刚在 ID.size() == 10 时添加了一个中断。我不应该这样做,但无论如何。还是谢谢
    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 2020-01-17
    • 1970-01-01
    • 2014-01-25
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多