C ++睡眠功能无法正常工作

时间:2014-05-04 11:14:40

标签: c++

所以我在业余时间开始学习C ++(Web Developer by trade,所以我并没有完全忘记代码)。

#include <iostream>
#include <windows.h>

using namespace std;
/*
 * 
 */
int main(int argc, char** argv) {

string response;
cout << "Would you like to buy some bread? : " << flush;
getline(cin, response);

if (response == "yes" || response == "y" || response == "Yes" || response == "Y") {
    cout << "\nYou have successfully bought some bread\nThanks." << endl;
    Sleep(2000);
    return 0;
}
else if (response == "no" || response == "n" || response == "No" || response == "N") { 
    cout << "\nYou didn't buy some bread.\n" << endl;
}        
string second_response;
    cout << "Would you like to go back and buy some bread? : " << flush;
    getline(cin, second_response);

if (second_response == "yes" || second_response == "y" || second_response == "Yes" || second_response == "Y") {
    cout << "\nYou have successfully bought some bread 2nd time round";
    Sleep(2000);
} 
else 
{
    cout << "\nMaybe next time?";
    Sleep(2000);
}
return 0;
}

正如你所看到的,如果他们想要购买面包(我不是很富有想象力),它只会询问依赖于他们答案的人。

问题是,睡眠功能似乎在字符串second_response部分中工作但是不正确,会发生什么是它等待2000毫秒然后输出文本时它意味着反过来?

我一直在谷歌寻找答案,但我认为最好来这里,所以我可以说出正确的错误。

谢谢你们!

1 个答案:

答案 0 :(得分:4)

您可能成为缓冲的牺牲品。

在将字符写入STDOUT的程序和实际出现在屏幕上的文本之间,存在各种处理层,其中一些尝试通过组合I / O操作来优化系统的整体吞吐量,直到一定量的数据为止。可用。例如,在超过某个缓冲区大小之前,或者直到遇到换行符时,通常不会打印字符。

请注意,您的问题以新行开头但不以一行结尾。您可能看到的是程序写入字符,终端驱动程序缓冲它们,然后程序休眠,当程序退出时,操作系统会自动刷新所有流,以便您最终看到前一行输出。

有各种方法可以立即强制输出​​;使用换行只是其中之一。查看'缓冲'和'cout',您将找到更多解决方案。