c ++奇怪的执行逻辑

时间:2014-10-22 12:47:16

标签: c++ execution

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(我知道那部分赢了&# 39;工作,但那不是我要求的)。我的问题是:一旦我输入了某些内容,我希望它能够立即返回(std::cin >> turnsDefined; "NEWLINE" std::cout << turnsDefined;)但是,它只是暂停而不返回任何内容。

1 个答案:

答案 0 :(得分:3)

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

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