eli miten kasvatttaa tiedoston ensimmäistä numeroa yhden isommaksi aina kun ohjelma ajetaan.
luvun saan luettua tiedostosta muuttujaan, saan ohjelmassa kasvatettua muuttujaa yhdellä, mutta en saa tallennettua tuota tietoa tuohon samaan paikkaan. Olen yrittänyt käyttää tuossa tiedoston käpistelyä a moodilla.
(Lisään myös jokaisella ohjelman kierroksella tietoa tiedostoon a-moodilla ja se onnistuu kyllä.)
ongelma tiedoston ensimmäisen numeron
5
449
Vastaukset
- r+ moodilla
korjaan r moodilla
- tehnyt ja osittain toimii
#include
#include
int main(void)
{
char etunimi[20];
char sukunimi[20];
char puhelinnumero[20];
int rivien_maara;
printf("Anna etunimi:");
scanf("%s",&etunimi[0]);
printf("Anna sukunimi:");
scanf("%s",&sukunimi[0]);
printf("Anna puhelinnumero:");
scanf("%s",&puhelinnumero[0]);
FILE *avaus;
char *tiedoston_nimi = "luettelo.txt";
char *avaus_moodi = "a"; //lisätään tiedostoon
avaus = fopen(tiedoston_nimi, avaus_moodi);
if(avaus == NULL)
{
printf("Tiedoston a -avauksessa on tapahtunut virhe!");
return 0;
}
else
{
fprintf(avaus, "\n%s %s %s", etunimi, sukunimi, puhelinnumero);
}
FILE *avaus2;
char *avaus_moodi2 = "r ";
avaus2 = fopen(tiedoston_nimi, avaus_moodi2);
if(avaus2 == NULL)
{
printf("Tiedoston r -avauksessa on tapahtunut virhe!");
return 0;
}
else
{
fscanf(avaus2, "%d", &rivien_maara);
//printf("1:%d\n", rivien_maara);
rivien_maara ;
fprintf(avaus2, "%d", rivien_maara);
fclose(avaus2);
}
printf("\nTietojen tallennus onnistui.");
getche();
return 0;
}
-----------
eli tiedot nimi/numero-tiedot kyllä menee tiedostoon, saan luettue ensimmäisenä olevan numerotiedon(joka käytännössä kertoo montako riviä siellä on tietoa) mutta sen kasvattaminen yhdellä ei onnistu. - fidel1
tehnyt ja osittain toimii kirjoitti:
#include
#include
int main(void)
{
char etunimi[20];
char sukunimi[20];
char puhelinnumero[20];
int rivien_maara;
printf("Anna etunimi:");
scanf("%s",&etunimi[0]);
printf("Anna sukunimi:");
scanf("%s",&sukunimi[0]);
printf("Anna puhelinnumero:");
scanf("%s",&puhelinnumero[0]);
FILE *avaus;
char *tiedoston_nimi = "luettelo.txt";
char *avaus_moodi = "a"; //lisätään tiedostoon
avaus = fopen(tiedoston_nimi, avaus_moodi);
if(avaus == NULL)
{
printf("Tiedoston a -avauksessa on tapahtunut virhe!");
return 0;
}
else
{
fprintf(avaus, "\n%s %s %s", etunimi, sukunimi, puhelinnumero);
}
FILE *avaus2;
char *avaus_moodi2 = "r ";
avaus2 = fopen(tiedoston_nimi, avaus_moodi2);
if(avaus2 == NULL)
{
printf("Tiedoston r -avauksessa on tapahtunut virhe!");
return 0;
}
else
{
fscanf(avaus2, "%d", &rivien_maara);
//printf("1:%d\n", rivien_maara);
rivien_maara ;
fprintf(avaus2, "%d", rivien_maara);
fclose(avaus2);
}
printf("\nTietojen tallennus onnistui.");
getche();
return 0;
}
-----------
eli tiedot nimi/numero-tiedot kyllä menee tiedostoon, saan luettue ensimmäisenä olevan numerotiedon(joka käytännössä kertoo montako riviä siellä on tietoa) mutta sen kasvattaminen yhdellä ei onnistu.kun luet tiedoston alussa olevan rivimääränumeron, tiedosto-osoitin siirtyy yhden merkin verran eteenpäin. Jos suoraan tämän jälkeen kirjoitat jotain tiedostoon, et enää kirjoita tiedoston alkuun. Eli kutsu rivien_maara-muuttujan kirjoittamista funktiota rewind (siis näin: "rewind(avaus2);"), niin tiedosto-osoitin siirtyy takaisin tiedoston alkuun.
Homma menee muuten ihan metsiin myös silloin, jos luettelo.txt-tiedostossa ei ole ensimmäisen merkkinä numeroa, esim. jos tiedosto on tyhjä. Eli varmista, että tiedostossa on aina rivimäärää merkitsevä merkki ekana, tai kirjoita jonkinlainen poikkeuskäsittely.
Ja vielä, et sulje avaus-tiedostopointteria missään vaiheessa. Ei välttämättä aiheuta ongelmia, mutta kyllä se varmaan ihan hyvä idea olisi. - puuttuu tosiaan tuosta
fidel1 kirjoitti:
kun luet tiedoston alussa olevan rivimääränumeron, tiedosto-osoitin siirtyy yhden merkin verran eteenpäin. Jos suoraan tämän jälkeen kirjoitat jotain tiedostoon, et enää kirjoita tiedoston alkuun. Eli kutsu rivien_maara-muuttujan kirjoittamista funktiota rewind (siis näin: "rewind(avaus2);"), niin tiedosto-osoitin siirtyy takaisin tiedoston alkuun.
Homma menee muuten ihan metsiin myös silloin, jos luettelo.txt-tiedostossa ei ole ensimmäisen merkkinä numeroa, esim. jos tiedosto on tyhjä. Eli varmista, että tiedostossa on aina rivimäärää merkitsevä merkki ekana, tai kirjoita jonkinlainen poikkeuskäsittely.
Ja vielä, et sulje avaus-tiedostopointteria missään vaiheessa. Ei välttämättä aiheuta ongelmia, mutta kyllä se varmaan ihan hyvä idea olisi.Minulla ainakin lukee sieltä tiedostosta 0:n jos tiedosto on vielä tyhjä.
avaus-tiedostopointterin sulkeminen puuttuu tosiaan tuosta. Aikaisemmin oli vain tuo avaus unohtui kun lisäsin tuon avaus2-tiedostopointterin.
pitää kokeilla tuota rewind. ei ole tuollainen tullut vielä vastaan. Kiitoksia neuvoista.
- homma bueno
homma bueno.
rewind ratkaisi ongelma.
meni pieni hetki (melkein kaksi kuukautta) kunnes palasin kyseisen tehtävän pariin.
kiitos neuvojille.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Aivosyöpää sairastava Olga Temonen TV:ssä - Viimeinen Perjantai-keskusteluohjelma ulos
Näyttelijä-yrittäjä Olga Temonen sairastaa neljännen asteen glioomaa eli aivosyöpää, jota ei ole mahdollista leikata. Hä912900Pelotelkaa niin paljon kuin sielu sietää.
Mutta ei mene perille asti. Miksi Venäjä hyökkäisi Suomeen? No, tottahan se tietenkin on jos Suomi joka ei ole edes soda2991686Mikä saa ihmisen tekemään tällaista?
Onko se huomatuksi tulemisen tarve tosiaan niin iso tarve, että nuoruuttaan ja tietämättömyyttään pilataan loppuelämä?2461557- 871391
IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!
Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel4021374Nyt kun Pride on ohi 3.0
Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että3981292Kiitos nainen
Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik21079Esko Eerikäinen tatuoi kasvoihinsa rakkaan nimen - Kärkäs kommentti "Ritvasta" lävähti somessa
Ohhoh! Esko Eerikäinen on ottanut uuden tatuoinnin. Kyseessä ei ole mikä tahansa kuva minne tahansa, vaan Eerikäisen tat381037Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?
Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun329874Miksi Purra-graffiti ei nyt olekkaan naisvihaa?
"Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden257855