Wyjście konsola nie wyświetla się poprawnie w Qt5

głosy
0

Piszę klasę frakcji dla tego zadania szkoły i mam problemy z dostaniem się komunikat konsoli na wyświetlaczu przed wejściem. Linia cout powinien wyświetlać przed przeczytaniem wejście z konsoli, ale to tylko pokazuje się po już wpisane wejście do konsoli. Jestem nowy na Qt, więc nie jestem pewny, jak to działa pod maską.

Oto kod:

// 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();
    // ...
}

Ponadto, jest tam lepszy sposób mogę odczytać frakcji bezpośrednio z konsoli jako liczb całkowitych? Mam go skonfigurować tak, że wpiszesz w liczniku ułamka i mianownik oddzielone spacją, który jest następnie odczytywane w postaci ciągu znaków. Planuję zerwania ciąg w połowie i oddające zarówno numery do liczb całkowitych.

Utwórz 13/02/2020 o 21:51
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

Aby mieć tekst rzeczywiście wykazały, że musi być przepłukany. W zależności od szczegółów, zaczerwienienie mogą być wykonywane automatycznie, gdy nowa linia jest napisane, i oczywiście przynajmniej gdy bufor zapisu aplikacja jest pełny, a gdy plik jest zamknięty. W aplikacji, żaden z nich nie stało. Więc trzeba przepłukać coutręcznie, za pomocą `QTextStream :: flush () .

„Nie są to dwa strumienie oddzielone od siebie?” Dokładnie, jakie są. Twoje dwa QTextStreamobiekty są całkowicie niezwiązane, więc odczyt z listy cin nie ma sposobu, aby powiedzieć swojej cout opróżnić swoje bufory. Związane pamiętać, że iostreamsrównie dobrze jak C stdio rzeczy jest specjalny mechanizm powodowania stdout być zaczerwieniona podczas odczytu z stdin .

Dlaczego QTextStreamnie równo po każdej <<operacji, to aby moc bardziej wydajne. Płukanie oznacza wywołanie systemowe muszą być wykonane, które są powolne (w porównaniu do zaledwie kopiowania tekstu z jednego miejsca do drugiego wewnątrz aplikacji).

Niepowiązane, nie chciałbym wymienić swoje własne obiekty cini cout, ponieważ jest on związany z przyczyną nieporozumień std::cini std::cout.

Odpowiedział 13/02/2020 o 22:32
źródło użytkownik

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