虽然循环在C ++中执行得太早

时间:2014-07-09 16:50:53

标签: c++ while-loop execution statements

我根据第5章编写了一个简单的程序,列出了来自C ++ Primer第5版的5.14,据说是为了从用户那里获取输入时间并制定程序"等待"以秒为单位的那段时间。程序使用while循环执行此操作,虽然等待持续时间正确,但语句执行的顺序不在我的系统上(带有g ++编译器的Ubuntu 14.04)。我在一个cout语句中写道,应该在while循环之前发生。目前它只在while循环之后执行,尽管在我的代码中在此循环之前。我不确定如何解决这个问题...

//Program to wait a certain number of seconds
//Also introduces the "while" loop

#include <iostream>
#include <ctime>

int main()
{
    using namespace std;
    float seconds;

    cout << "\nEnter the number of seconds you wish to wait for: ";

    cin >> seconds; 
    cout << "\n\nStarting countdown...\a";

    //clock_t is a variable type! It's in terms of system clock units though, NOT seconds

    clock_t delay = seconds * CLOCKS_PER_SEC;
    clock_t start = clock();

    while (clock() - start < delay);

    cout <<"\a and done!\n\n";

    return 0;
}

输入等待秒数后得到的输出是系统闪烁光标我输入的时间,然后是&#34;开始倒计时...并完成!&#34;一次全部。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您想要刷新cout的缓冲区,例如:

cout << "\n\nStarting countdown...\a" << endl;

或者,如果您不想要收货,请使用:

cout << "\n\nStarting countdown...\a" << flush;

cout.flush();

输出后;

答案 1 :(得分:3)

输出流将缓冲其输出,直到刷新为止。您可以手动刷新它以确保在预期时看到输出:

cout << "\n\nStarting countdown...\a" << flush;

答案 2 :(得分:0)

您也可以简单地输出到cerr而不是cout,然后无需显式刷新,因为它会自动刷新。