c ++中的奇怪循环逻辑

时间:2014-10-27 17:15:58

标签: loops c++11 logic

std::cout << "How many turns do you want to do?" << std::endl << std::endl << std::endl;
    std::string turnsDefined;
    std::cin >> turnsDefined;
    //std::cin.sync();
    bool hasPassed = false;
    int objectSizeIniti = 0;
    int objectSizePost = 0;
    for(char c : turnsDefined){
        objectSizeIniti++;
    }
    bool boolForCharIsDigi[objectSizeIniti];
    for(bool _b : boolForCharIsDigi){
        _b = false;
    }

while(hasPassed != true){
        for(char c : turnsDefined){
            if(isdigit(c) == 0){
                boolForCharIsDigi[objectSizePost] = false;
            }else if (isdigit(c) != 0){
                boolForCharIsDigi[objectSizePost] = true;
            }
            bool allTrue = false;
            for(int i = 0; i < sizeof(boolForCharIsDigi)/sizeof(boolForCharIsDigi[0]); i++){
                if(boolForCharIsDigi[i] == false){
                    allTrue = false;
                    std::cin >> turnsDefined;
                    std::cout << "You may only use numbers to define the amount of turns. No decimals either." << std::endl << std::endl;
                    break;
                }else if(boolForCharIsDigi[i] == true){
                    allTrue = true;
                    hasPassed = true
                }
            }
        }
        objectSizePost++;
    }

我试图理解为什么上面的代码行为如此奇怪。

我正在尝试做什么:

我得到输入并测试它是否只包含数字。如果是,它只是传递循环(将w循环检查的变量设置为true)。如果输入确实包含除数字之外的字符,则它会请求另一个输入并警告用户。

发生了什么:它随机需要一些输入来实际接受“仅数字”的输入。总体而言,整个计划只是随机行动。

2 个答案:

答案 0 :(得分:3)

  

我想做的事情:   我得到的输入和测试是否只包含数字。如果它   它只是传递循环(将变量设置为w循环)   检查是否真实)。如果输入确实包含除以外的字符   数字,它请求另一个输入并警告用户。

跳过调试部分,我建议你应该std::all_of

if( std::all_of( turnsDefined.begin(), turnsDefined.end(), ::isdigit ) )
{
   // Correct input 
}

else
{
  // Warn the user, re-enter stuff   
}

答案 1 :(得分:2)

在你的代码中,初始化'boolForCharIsDigi'的for循环从不更新实际数组:

for(bool _b : boolForCharIsDigi){
    _b = false;
}

问题是_b是一个临时变量。你需要把它作为这样的参考:

for(bool& _b : boolForCharIsDigi){
    _b = false;
}

可能还有其他问题,但是这个问题突然出现在我眼中......; - )