Консольный вывод не правильно отображать в Qt5

голоса
0

Я пишу класс дроби для этого задания школы и у меня возникают проблемы при получении сообщения консоли на дисплее перед входом. СоиЬ линия должна отображаться перед чтением ввода с консоли, однако он показывает только после того, как я уже напечатал вход в консоль. Я новичок в 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();
    // ...
}

Кроме того, есть лучший способ, которым я могу читать фракции непосредственно из консоли, как целые числа? Я его настроить так, что вы вводите в числителе фракции и знаменателя, разделенных пробелом, который затем считывается в виде строки. Я планирую разорвать строку пополам и разливочные оба числа до целых чисел.

Задан 13/02/2020 в 23:51
источник пользователем
На других языках...                            


1 ответов

голоса
1

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

«Разве не два потока отдельно друг от друга?» , Именно они. Ваши два QTextStreamобъекта совершенно не связан, так что вы читаете из ваших cin не имеет возможности сказать СВОЕМУ cout промывать свои буфера. Связанные, обратите внимание , что iostreamsтак же , как C STDIO материал имеет специальный механизм , вызывающий стандартный вывод следует промыть при чтении из стандартного ввода .

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

Unrelated, я бы не назвал свои собственные объекты cinи cout, поскольку она обязана вызвать путаницу с std::cinи std::cout.

Ответил 14/02/2020 в 00:32
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more