所以我在业余时间开始学习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毫秒然后输出文本时它意味着反过来?
我一直在谷歌寻找答案,但我认为最好来这里,所以我可以说出正确的错误。
谢谢你们!
答案 0 :(得分:4)
您可能成为缓冲的牺牲品。
在将字符写入STDOUT的程序和实际出现在屏幕上的文本之间,存在各种处理层,其中一些尝试通过组合I / O操作来优化系统的整体吞吐量,直到一定量的数据为止。可用。例如,在超过某个缓冲区大小之前,或者直到遇到换行符时,通常不会打印字符。
请注意,您的问题以新行开头但不以一行结尾。您可能看到的是程序写入字符,终端驱动程序缓冲它们,然后程序休眠,当程序退出时,操作系统会自动刷新所有流,以便您最终看到前一行输出。
有各种方法可以立即强制输出;使用换行只是其中之一。查看'缓冲'和'cout',您将找到更多解决方案。