» »

[C++] branje datoteke vodi v neskončno zanko

[C++] branje datoteke vodi v neskončno zanko

stalker ::

Spodaj je simpl koda, ki pa v while zanki zblazni (postane neskončna zanka). Rad bi, da bi mi program prebral števila in jih shranil/izpisal. Namesto tega mi izpiše vrednost spremenljivke num.
Aja, uporabljam bloodshed c++, če ma to kakšno vezo....

    #include <iostream>
    using std::cerr;
    using std::cout;
    using std::endl;

    #include <fstream>
    using std::ifstream;

    #include <cstdlib> // for exit function

    // This program reads values from the file 'example.dat'
    // and echoes them to the display until a negative value
    // is read.

    int main()
    {
       ifstream indata; // indata is like cin
       int num; // variable for input value

      indata.open("random.txt"); // opens the file
       if(!indata) { // file couldn't be opened
          cerr << "Error: file could not be opened" << endl;
          exit(1);
       }

      indata >> num;
       while ( !indata.eof() ) { // keep reading until end-of-file
          cout << "The next number is " << num << endl;
          indata >> num; // sets EOF flag if no value found
       }
       indata.close();
       cout << "End-of-file reached.." << endl;
       return 0;
    }

imagodei ::

Kje povečuješ kakšen števec, da veš da si prišel do eof?
- Hoc est qui sumus -

stalker ::

Nisem ravno popoln začetnik, le z datotekami nisem še programiral. Kar sem uspel na netu najti so vsi programi narejeni po istem principu, brez kakršnegakoli števca.
Aja, namesto izpisa štvelike v datoteki mi izpiše random vrednost oz vrednost spremenljivke num.

PS: sploh mi noče prebrati nobenega znaka iz datoteke...

Zgodovina sprememb…

  • spremenilo: stalker ()

xordie ::

Kaj imas v datoteki?

Verjetno ti pri branju namesto stevila prebere se nek drugi znak, ki na indata nastavi failbit. Preverjati moras ali si uspesno prebral stevilo iz indata.
x

imagodei ::

Hm, c++ ni my cup of tea. Vseeno se mi tako po logiki zdi, da bi rabil nekaj, da te spravi iz zanke. Nekje moraš povečevat file pointer, da nekoč prileze do EOF, ali ne?

Mimogrede, ni čudno, da ti izpisuje spremenljivko num, če pa imaš to tako zapisano:

cout << "The next number is " << num << endl
- Hoc est qui sumus -

stalker ::

V datoteki so samo števila. Pa tudi če je v fajlu samo ena številka, je ne prebere in izpiše (brez zanke). Proval sem n različnih tutorialov po spletu in nikoli mi ni ratalo prebrati številke. Ima kdo kos kode ki mu dejansko bere števila iz fajla?? Bi bil zelo hvaležen.

xordie ::

Meni tvoj primer dela. V datoteki so samo stevila locena z '\n'. Ce dodam za eno izmed stevil ';' se takoj ujame v neskoncno zanko.

Torej je napaka v tvoji datoteki. Mogoce jo imas shranjeno v unicode?
x

stalker ::

xordie, hvala ti! Res je, datoteka je bila shranjena v unicode in sem spremenil v ansi in zdaj dela. Lahko še razložiš zakaj v unicode ne dela?

xordie ::

Unicode je v C/C++ ena mala umetnost, ki zahteva kar nekaj casa, da jo osvojis. Prav tako je dobro, da ves kako zgledajo datoteke v osnovi. Za zacetek primerjaj binarno vsebino unicode in ansi datoteke, da sam vidis v cem se razlikujeta. Unicode lahko uporablja vec bytov za zapis enega znaka, medtem ko ascii samo en byte.

V tvojem primeru zgleda stvar nekako tako:

V unicode datoteki imas zapisana stevila, kjer posamezen znak(cifra) namesto enega byta zavzema dva. Ko beres iz datoteke se znaki tretirajo kot en byte. Tako v bistvu en znak v unicode tebi predstavlja dva znaka v ascii, ki pa sta verjetno nekaj povsem drugega. Celoten zapis pa ni stevilo ampak neko zaporedje znakov, ki nimajo pomena. Tako pri pretvajanju tega zaporedja zankov v stevilo pride do napake, ki pa je ti v tvojem primeru ne preverjas.
x


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C++ fibonacci

Oddelek: Programiranje
61114 (709) lebdim
»

vprasanje c++

Oddelek: Programiranje
422474 (2473) Volk|
»

[C++] - Tolmačenje povedi in izvedba operacij nad števkami

Oddelek: Programiranje
353351 (2587) jernejl
»

int to string v c++

Oddelek: Programiranje
272340 (2068) OwcA
»

[C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevil

Oddelek: Programiranje
222944 (2755) snow

Več podobnih tem