Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Merkkien lukeminen tiedostosta taulukkoon

Burton [26.06.2007 22:23:36]

#

Minulla on char-taulukko taulu[128][128] ja minun täytyisi ladata siihen tiedostosta merkkejä. Tiedosto on "alueeltaan" 128*128 merkeissä. Jokaisella rivillä on 128 merkkiä ja rivinvaihto ja rivejä on 128. Ongelma on siinä, etten saa tällä koodilla:

for (x = 0; x < 128; x++) {
    fgets(taulu[x], 128, t);
}

kaikkea tiedostosta. Taulukkoon tallentuu vain 64 riviä ja viimeisen rivin perässä on jotain suttua. Voisiko taulukkoon tallentua rivinvaihtokin rivien perästä?
Apua.

Antti Laaksonen [26.06.2007 23:04:45]

#

Hyvä tapa päästä ongelman jäljille on tosiaan tutkia, mitä tietoja taulukkoon on todellisuudessa luettu. Funktio fgets ottaa mukaan myös rivinvaihdot, ja sitä paitsi loppuun lisätään aina nollamerkki. Jos rivi halutaan lukea kokonaan, funktiolle annettavan pituuden täytyy olla 130. Silloin 128 tavallisen merkin lisäksi on tilaa myös rivinvaihdolle ja nollamerkille. Vastaavasti taulukkoa täytyy myös suurentaa niin, että toinen ulottuvuus on 130. Tässä menee toki tilaa hukkaan kaksi merkkiä riviä kohti, mutta muuten ylimääräisistä merkeistä on tuskin haittaa.

Metabolix [26.06.2007 23:17:02]

#

Voit käyttää fscanf-funktiota. Formaatissa väli tarkoittaa, että luetaan seuraavaan ei-väliin asti, väleiksi siis lasketaan myös rivinvaihdot ja muut vastaavat. Pieni c tarkoittaa merkkejä, ja %-merkin ja c:n väliin voi antaa merkkien määrän. Lisäksi funktion palautusarvosta voi tarkistaa, onnistuiko luku, funktio nimittäin palauttaa tiedon, montako %-merkillä alkavaa määrettä käsiteltiin onnistuneesti. Kokonaisuutena ratkaisu näyttäisi tältä:

for (i = 0; i < 128; ++i) {
  if (fscanf(tiedosto, " %128c", taulu[i]) != 1) {
    printf("Virhe!\n");
  }
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta