#c #iostream #clion
#c #iostream #clion
Вопрос:
Я пытаюсь использовать cerr
и clog
вместо cout
того, чтобы выдавать сообщение об ошибке. Но я столкнулся с проблемой. Ниже приведена упрощенная версия.
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 5; i) {
int x;
cin >> x;
cout << "first" << endl;
cerr << "second" << endl;
}
return 0;
}
Но результат был
1
first
second
2
second
first
3
second
first
4
first
second
5
second
first
Однако, если я использую g в cmd Win10 для компиляции и запуска, все было в порядке.
1
first
second
2
first
second
3
first
second
4
first
second
5
first
second
Поэтому я начинаю сомневаться, что существуют некоторые определенные настройки, которые делают внутреннюю среду компиляции и запуска Clion отличной от g . Но я не уверен.
Кто-нибудь может сказать мне, почему?
Комментарии:
1. Это неудачный результат буферизации, выполняемой внутри «консоли» CLion, и буферизации стандартных потоков (или, скорее, отсутствия буферизации для
std::cerr
).2. Извините, я новичок, не могли бы вы описать подробно? И не могли бы вы дать несколько инструкций о том, как исправить проблему с помощью Clion, если это возможно? Спасибо.
Ответ №1:
Под капотом много чего есть (SPD упомянул некоторые в комментарии, но не все — посередине есть пти-труба). Но это просто работает:
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 5; i) {
int x;
cin >> x;
cout.flush();
cerr.flush();
cout << "first" << endl;
cout.flush();
cerr << "second"<< endl;
cerr.flush();
}
return 0;
}
Подробнее читайте здесь.
Комментарии:
1. Это все еще не работает на Клионе. Проблема не в кодах. Мои исходные коды хорошо работают на терминале, но не на Clion. Ответ SPD навел меня на мысль, что это, вероятно, связано с тем, что консоль в Clion имеет несколько другие настройки, хотя я все еще не очень понимаю.