Вывод консоли не отображается правильно в Qt5 - PullRequest
1 голос
/ 13 февраля 2020

Я пишу класс дроби для этого школьного задания и у меня возникают проблемы с отображением сообщения консоли перед вводом. Строка cout должна отображаться перед чтением ввода с консоли, однако она появляется только после того, как я уже ввел ввод в консоль. Я новичок в Qt, поэтому я не знаком с тем, как он работает под капотом.

Вот код:

// one of the requrements is we have to use Qt instead of the standard iostream
int main(void) {
    QTextStream cout(stdout);
    QTextStream cin(stdin);

    Fraction f1, f2, add, sub, mul, div;
    QString line;

    cout << "Enter the numerator and denominator of fraction 1: ";
    line = cin.readLine();
    // ...
}

1 Ответ

3 голосов
/ 14 февраля 2020

Чтобы текст действительно отображался, его необходимо очистить. В зависимости от деталей, сброс может выполняться автоматически при записи новой строки, и, очевидно, по крайней мере, когда буфер записи приложения заполнен, и когда файл закрыт. В вашем приложении ничего из этого не происходит. Поэтому вы должны вручную sh ваш cout вручную, используя `QTextStream :: flu sh () .

" Разве два потока не отделены друг от друга? другие? ", именно они. Ваши два QTextStream объекта совершенно не связаны, поэтому вы читаете из ваш cin не может сказать ваш cout гриппу sh его буферам. Обратите внимание, что iostreams, а также C stdio имеет специальный механизм, вызывающий сброс stdout при чтении с stdin .

Относительно того, почему QTextStream не вызывает гриппа sh после каждой операции <<, это сделает вывод более эффективным. Сбрасывание означает, что системный вызов должен выполняться медленно (по сравнению с простым копированием текста из одного места в другое внутри приложения).

Вне зависимости, я бы не назвал ваши собственные объекты cin и cout, потому что это может вызвать путаницу с std::cin и std::cout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...