【问题标题】:c++ strange execution logicc++奇怪的执行逻辑
【发布时间】: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(); 呢? :)

标签: c++ execution


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2012-08-22
    相关资源
    最近更新 更多