Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Tiedostoon kirjoitus (C++)

hanu767 [31.03.2006 10:25:40]

#

Olen harjoitellut c++:lla tiedostoon kirjoittamista ja eteen tuli tällainen ongelma, mihin en ole löytänyt vastausta. Yritän selittää...

Ohjelmassa käyttäjä on syöttänyt muuttujaan merkkijonon, jonka pituus saattaa vaihdella. Tiedostoon kirjoitettaessa kuitenkin muuttujasta pitäisi saada 'tyhjät' merkit pois. Siis, jos muuttujalle on määritelty maksimikoko esim. muuttuja[50], mutta käyttäjä syöttääkin merkkijonon joka on pituudeltaan kymmenen merkkiä. Ohjelma tulostaa tiedostoon jäljelle jäävät käyttämättömät merkit tyhjinä välilyönteinä.

Tiedosto näyttää nyt tältä ('_' = tyhjä väli):
Muuttuja1_________________Muuttuja2

Kun sen pitäisi näyttää tältä:
Muuttuja1Muuttuja2

Tällä tapaa pääpirteissään olen tiedostoon kirjoituksen tehnyt:

// Tiedoston avaus
ofstream tdsto("tiedosto_nimi");

// Kirjoitetaan muuttujat tiedostoon
tdsto.write(muuttuja1, sizeof muuttuja1);
tdsto.write(muuttuja2, sizeof muuttuja2);

// Tiedoston sulkeminen
tdsto.close();

Mikä avuksi? Löytyisikö netistä jotain asiaa sivuavaa ohjetta?

Deewiant [31.03.2006 11:10:44]

#

Ei kannata kirjoittaa sizeof muuttujan verran, vaan niin monta merkkiä, kuin käyttäjä kirjoitti. Muuten se tosiaan tulostaa nuo "ylimääräiset".

hanu767 [31.03.2006 11:15:34]

#

Deewiant kirjoitti:

Ei kannata kirjoittaa sizeof muuttujan verran, vaan niin monta merkkiä, kuin käyttäjä kirjoitti. Muuten se tosiaan tulostaa nuo "ylimääräiset".

Mutta jos ei tiedä etukäteen, kuinka paljon käyttäjä kirjoittaa...

Vai saisiko tuohon jotenkin, että ohjelma laskee muuttujasta merkkien määrän ja kirjoittaa tiedostoon sitten ainoastaan kirjoitetut merkit?

os [31.03.2006 13:00:54]

#

Kannattaa lukea jostakin C(++) oppaasta kohta merkkijonot. Lyhyesti: Merkkijono päättyy nollatavuun. Luettu muuttuja1-merkkijono koostuu esimerkiksi merkeistä 'M','u','u','t','t','u','j','a','1','\0'. Jos kirjotat merkkijonon tiedostoon <<-virtaoperaattorilla (tdsto << muuttuja1;) kirjoitus lopetetaan kun heti kun nollatavu ilmaantuu.

hanu767 [31.03.2006 13:09:02]

#

os kirjoitti:

Jos kirjotat merkkijonon tiedostoon <<-virtaoperaattorilla (tdsto << muuttuja1;) kirjoitus lopetetaan kun heti kun nollatavu ilmaantuu.

Jees näinhän se näyttää toimivan. Kiitos! Ajattelin taas kerran asian liian monimutkaisesti...

kooderi [31.03.2006 17:06:26]

#

sizeof() palauttaa varatun char-taulukon koon. strlen() palauttaa taulukkoon kirjoitetun merkkijonon piduuden.

Metabolix [01.04.2006 09:13:08]

#

Ja jos kerran C++ on käytössä, niin silloin voi luopua char-taulusta ja ottaa string-luokan käteen.

Vastaus

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

Tietoa sivustosta