cout 和 cerr 的控制台输出顺序错误

Wrong console output order of cout and cerr

本文关键字:输出 顺序 错误 控制台 cerr cout      更新时间:2023-10-16

当介绍中没有写入任何内容并且用户能够在错误输出后再次编写介绍时,我想输出一个错误。问题是控制台输出的顺序错误。为什么会这样,我该如何解决?

#include <iostream>
#include <string>
using namespace std;
int main() {
    string introduction;
    cout <<"Introduction:" << endl;
    getline(cin,introduction);

     if(introduction.size()==1)
     {
         cerr << "ERROR PLEASE WRITE AN INTRODUCTION!" << endl;
         cerr.flush();
         cout <<"Introduction:" << endl;
         getline(cin,introduction);
     }
    return 0;
}

控制台输出:

    Introduction:
    Introduction:
    ERROR PLEASE WRITE AN INTRODUCTION!

新编辑:编辑主码到源代码中

我的解决方案:

#include <iostream>
#include <string>
#include <unistd.h>
using namespace std;
unsigned int microseconds;
int main() 
{
    string introduction;
    cout <<"Introduction:" << endl;
    getline(cin,introduction);
    cout << introduction.size()<< endl;
    if(introduction.size()==1)
    {
         cerr << "ERROR PLEASE WRITE AN INTRODUCTION!" << endl;
         microseconds=1000;
         usleep(microseconds);
         cout <<"Introduction:" << endl;
         getline(cin,introduction);
    }
    return 0;
}

完美的解决方案:

#include <iostream>
#include <string>
#include <unistd.h>
using namespace std;
unsigned int microseconds;
int main() 
{
    string introduction;
    cout <<"Introduction:" << endl;
    getline(cin,introduction);

    while (introduction.size() == 1) 
    {
        cerr << "ERROR PLEASE WRITE AN INTRODUCTION!" << endl;
        microseconds = 1000;
        usleep(microseconds);
        cerr.flush();
        cout << "Introduction:" << endl;
        getline(cin, introduction);
    }
    return 0;
}