výstup na konzoli nezobrazuje správně v Qt5

hlasů
0

Píši třídu frakce pro tento školní práce a mám potíže s konzoly zprávu displej před vstupem. Cout řádek by měl ukazovat, dokud si nepřečtete vstup z konzoly, ale to jen objeví poté, co jsem již napsal vstup do konzole. Jsem nový Qt, takže nejsem obeznámen s tím, jak to funguje pod kapotou.

Zde je kód:

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

Také je tam lepší způsob, jak mohu číst frakce přímo z konzole jako celá čísla? Mám to nastaveno tak, že napíšete v čitateli zlomku a jmenovatel odděleny mezerou, která je pak četl ve formě řetězce. Mám v plánu na lámání řetězec v polovině a odlévání obě čísla na celá čísla.

Položena 13/02/2020 v 23:51
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Chcete-li mít textu skutečně prokázáno, musí být vyprázdněn. V závislosti na detailech, proplachování může být automaticky provedena, když je nový řádek napsáno, a zřejmě alespoň když vyrovnávací paměti aplikace zápisu je plná, a když je soubor uzavřen. V aplikaci, žádný z nich se stalo. Takže musíte omyjte coutručně pomocí `QTextStream :: flush () .

„Jsou to dva proudy od sebe oddělit?“ Přesně, jaké jsou. Vaše dva QTextStreamobjekty jsou zcela nesouvisí, takže čtení z vašich cin nemá žádný způsob, jak říct vaší cout vyprázdnění jeho vyrovnávacích pamětí. Příbuzné, na vědomí, že iostreamsi c stdio materiál má speciální mechanismus způsobující stdout být vyprázdněna při čtení ze standardního vstupu .

Proč QTextStreamne flush po každém <<provozu, který je, aby výstup efektivnější. Splachovací prostředky je třeba provést systémové volání, které jsou pomalé (ve srovnání s jen kopírování textu z jednoho místa na druhé uvnitř aplikace).

Nesouvisí, nebyl bych jmenovat své vlastní objekty cina cout, protože je vázán vést k záměně s std::cina std::cout.

Odpovězeno 14/02/2020 v 00:32
zdroj uživatelem

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