c++奇怪的执行逻辑

Posted

技术标签:

【中文标题】c++奇怪的执行逻辑【英文标题】:c++ strange execution logic 【发布时间】:2014-10-22 12:47:16 【问题描述】:
int main(int argc, const char * argv[])

    std::cout << "How many turns do you want to do?" << std::endl << std::endl;
    std::string turnsDefined;
    std::cin >> turnsDefined;
    std::cout << turnsDefined;
    bool hasPassed = false;
    int objectSize;
    for(char c : turnsDefined)
        objectSize++;
    
    std::cout << objectSize;
    while(hasPassed != true)
        for(char c : turnsDefined)
            if(isdigit(c) != true)
                hasPassed = false;
                break;  
            
        
    

    std::cout << "Successfully passed all if conditions.";
    return 0;

所以,这个短程序所做的就是获取用户输入,测试它是否包含任何字母,然后将 bool 设置为 false 或 true(我知道那部分不起作用,但是这不是我要的)。我的问题是:一旦我输入了某些内容,我希望它会立即返回 (std::cin &gt;&gt; turnsDefined; "NEWLINE" std::cout &lt;&lt; turnsDefined;) 但是,它只是暂停而不返回任何内容。

【问题讨论】:

你还没有初始化objectSize 您从未将hasPassed 设置为true,因此您的while 循环不会退出。由于您不刷新 cout(只需给它一个换行符,或 std::endl),它可能不会显示任何内容。 @icabod 我很清楚我从未将 hasPassed 设置为 true。但它不应该改变任何东西,因为循环是在代码之后进入的。 提示:std::cout &lt;&lt; turnsDefined; 之外的所有内容都与您的问题无关。即使您在此之后while ( true ); 也不会发生输出。这可能是您自己应该尝试的第一件事。你的问题可以用 8 行代码和一句话来完成。此外,因此您错过了 icabod 的(正确)答案的重点。 for(char c : turnsDefined) objectSize++; int objectSize = turnDefined.size(); 呢? :) 【参考方案1】:

您没有得到任何输出的原因是stdout(默认情况下由cout 使用)没有被刷新。 stdout 流被缓冲,并且这个缓冲区只会在某些情况下被刷新:到达换行符时,当它被指示刷新时(例如使用cout.flush()),或者在退出进程时。

在您的代码中,您没有输出任何换行符,也没有手动刷新缓冲区,并且(因为 hasPassed 从未设置为 true,导致无限循环)您永远不会退出进程.由于这些原因,stdout 永远不会被刷新,因此显示器上不会显示任何输出。

【讨论】:

以上是关于c++奇怪的执行逻辑的主要内容,如果未能解决你的问题,请参考以下文章

微信小游戏开发实战5:重复执行和逻辑循环的区别

约束逻辑程序中的奇怪警告和计算结果

杂乱C++学习

奇怪的大于逻辑与字符向量中的数字

C++逻辑表达式运算

小白学习C++ 教程四C++逻辑运算符While循环和For 循环