• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Qt Creator- windows. Dziwne działanie programu. Jak to naprawić?

Object Storage Arubacloud
+1 głos
374 wizyt
pytanie zadane 1 stycznia 2019 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 1 stycznia 2019 przez Jakub 0

Witam, uczę się Qt z książki: https://helion.pl/ksiazki/c-i-qt-wprowadzenie-do-wzorcow-projektowych-wydanie-ii-alan-ezust-paul-ezust,cppqtw.htm#format/e

Jak na razie często napotykam problemy... Sprawa wygląda to tak:

main.cpp

#include <QTextStream>
#include <QString>
#include <QFile>
#include <iostream>
 
QTextStream cout(stdout);
QTextStream cerr(stderr);
QTextStream cin(stdin);
 
int main() {
 
    ///---------------------------------------------------------------
 
    QString str, newstr;
    QTextStream strbuf(&str);
 
    int lucky = 7;
    float pi = 3.14f;
    double e = 2.71;
 
    cout << "Strumien w pamieci" << "\r\n";
 
    strbuf << "szczesliwy_numerek: " << lucky
           << "\r\npi: " << pi
           << "\r\ne: " << e << "\r\n";
 
    cout << str;
 
    ///---------------------------------------------------------------
 
    QString fileName;
 
    cout<<"Podaj nazwe pliku: ";
    cin >> fileName;
 
    QFile data(fileName);
 
    if(data.open(QIODevice::ReadOnly)){
        cout<<"Plik istnieje, czy go nadpisac? [1/0]"<<endl;
        int c;
        cin>>c;
        if(c==0)
            return 0;
    }
 
    data.close();
 
    data.open(QIODevice::WriteOnly);
 
    QTextStream out(&data);
    out << str;
 
    data.close();
 
    ///---------------------------------------------------------------
 
    cout << "Odczyt danych z pliku: UWAGA na bledy!" << endl;
 
    if(data.open(QIODevice::ReadOnly)) {
 
        QTextStream in(&data);
 
        int lucky2;
        in >> newstr >> lucky2;
        if (lucky != lucky2)
            cerr << "BLAD! Niepoprawny " << newstr <<" "<< lucky2 << endl;
        else
            cout << newstr << " OK" << endl;
 
        float pi2;
        in >> newstr >> pi2;
        if (pi2 != pi)
            cerr << "BLAD! Niepoprawny " << newstr << pi2 << endl;
        else
            cout << newstr << " OK" << endl;
 
        double e2;
        in >> newstr >> e2;
        if (e2 != e)
            cerr << "BLAD! Niepoprawny " << newstr << e2 << endl;
        else
            cout << newstr << " OK" << endl;
 
        data.close();
    }
    cout << "Odczyt z pliku linia po linii: " << endl;
 
    ///---------------------------------------------------------------
 
    if(data.open(QIODevice::ReadOnly)) {
        QTextStream in(&data);
        while (!in.atEnd()) {
            newstr = in.readLine();
            cout << newstr << endl;
        }
        data.close();
    }
 
    ///---------------------------------------------------------------
 
    cin.readLine(); cin.readLine();
    return 0;
}

*.pro

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
 
SOURCES += \
     main.cpp

Przykładowe wykonanie programu wygląda tak:

Tak jak by aplikacja nie działała po kolei... najpierw mam podać strumień wejściowy ( po kodzie widać że tak nie powinno być ), dopiero potem w konsoli pokazywane jest to co powinno być wyświetlone wcześniej, a potem z jakiegoś powodu już wszystko działa normalnie :/

W razie czego nie używam std::cout, std::cin itd... lecz:

QTextStream cout(stdout);
QTextStream cerr(stderr);
QTextStream cin(stdin);

Z góry dziękuje wam za pomoc :)

komentarz zamknięcia: problem rozwiązany.

1 odpowiedź

+3 głosów
odpowiedź 1 stycznia 2019 przez monika90 Pasjonat (22,940 p.)
wybrane 1 stycznia 2019 przez Jakub 0
 
Najlepsza

To co zapisujesz do strumienia trafia do buforu i dopiero gdy bufor jest pełny to jego zawartość trafia do konsoli.

cout.flush(); albo cout << flush; przed każdym cin >> cośtam; powinno pomóc.

Strumienie cin i cout ze standardowej biblioteki robią to automatycznie, a te z Qt chyba tego nie potrafią.

komentarz 1 stycznia 2019 przez Jakub 0 Pasjonat (23,120 p.)

@monika90,
 dzięki, teraz wszytko działa.

Podobne pytania

0 głosów
1 odpowiedź 1,057 wizyt
pytanie zadane 26 sierpnia 2015 w C i C++ przez Jakub Nowacki Początkujący (470 p.)
0 głosów
2 odpowiedzi 223 wizyt
pytanie zadane 25 sierpnia 2015 w C i C++ przez kacper6909 Gaduła (3,040 p.)
0 głosów
0 odpowiedzi 95 wizyt

92,656 zapytań

141,546 odpowiedzi

319,987 komentarzy

62,025 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...