• 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ć?

VPS Starter Arubacloud
+1 głos
398 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,081 wizyt
pytanie zadane 26 sierpnia 2015 w C i C++ przez Jakub Nowacki Początkujący (470 p.)
0 głosów
2 odpowiedzi 231 wizyt
pytanie zadane 25 sierpnia 2015 w C i C++ przez kacper6909 Gaduła (3,040 p.)
0 głosów
0 odpowiedzi 96 wizyt

92,768 zapytań

141,695 odpowiedzi

320,510 komentarzy

62,106 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

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!

...