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 >> turnsDefined; "NEWLINE" std::cout << turnsDefined;
) 但是,它只是暂停而不返回任何内容。
【问题讨论】:
你还没有初始化objectSize
。
您从未将hasPassed
设置为true
,因此您的while 循环不会退出。由于您不刷新 cout(只需给它一个换行符,或 std::endl
),它可能不会显示任何内容。
@icabod 我很清楚我从未将 hasPassed 设置为 true。但它不应该改变任何东西,因为循环是在代码之后进入的。
提示:std::cout << turnsDefined;
之外的所有内容都与您的问题无关。即使您在此之后while ( true );
也不会发生输出。这可能是您自己应该尝试的第一件事。你的问题可以用 8 行代码和一句话来完成。此外,因此您错过了 icabod 的(正确)答案的重点。
for(char c : turnsDefined) objectSize++;
int objectSize = turnDefined.size();
呢? :)
【参考方案1】:
您没有得到任何输出的原因是stdout
(默认情况下由cout
使用)没有被刷新。 stdout
流被缓冲,并且这个缓冲区只会在某些情况下被刷新:到达换行符时,当它被指示刷新时(例如使用cout.flush()
),或者在退出进程时。
在您的代码中,您没有输出任何换行符,也没有手动刷新缓冲区,并且(因为 hasPassed
从未设置为 true
,导致无限循环)您永远不会退出进程.由于这些原因,stdout
永远不会被刷新,因此显示器上不会显示任何输出。
【讨论】:
以上是关于c++奇怪的执行逻辑的主要内容,如果未能解决你的问题,请参考以下文章