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
493
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
SDP jo 100 % suositumpi kuin persut
Kertoo Hesarin uusin kannatuskysely. Demareiden kannatus on miltei tuplat verrattuna persuihinl. Suomen kansa ei selväst28714628Valtavasti suomalaisia asunnottomina, mutta ei yhtään somalia
tai muuta kehitysmaalaista. Mites tässä näin kävi? Tiedän hyvin, että esim. somaleita lentää ulos mm. Hekan asunnoista,1564122PS ylivoimainen nousija myös HS:n gallupissa, SDP laskee taas
https://www.verkkouutiset.fi/a/hs-gallup-sdpn-suosio-laskee-ps-nousussa/#0a7d2507 Ylivoimainen viime kuukausien nousija1343868Totuuspuolueen johtaja Jaana "prinsessa Leia" Kavonius on vangittu
Kavonius määrättiin jo keväällä 2024 poissaolevana vangittavaksi todennäköisin syin epäiltynä 13 vainoamisesta ja 24 kun4411822Kovia syytöksiä Stefan Thermaninsta.
Jättänyt taas maksamatta kohuliikemies, hupparit ja muita ostamiaan tavaroita. On soiteltu liikkeestä ja Stefan iskenyt1711777En minä kyllä enää odota sinua
Olet siellä sen harmaan kanssa. Niin, annoit minun nähdä lämpimät tunteesi siitä huolimatta. Se merkitsi kyllä paljon. O351706Jos joku luulee että kaikki käy
Sanon vain tämän. Minun kanssani ei neuvotella. Minun kanssani eletään tasavertaisesti. Jos se on liikaa, niin ovi rinn521375Joka kolmas työtön on työkyvytön
Viime vuonna työnhakuvelvoitteen ulkopuolella oli noin kolmannes työttömistä työnhakijoista. Huhheijaa, mihin suomalais1341165Sakin hivutus - ilmiö
Miten tuollainen tuollainen ilmiö kuin ”sakin hivutus” syntyy? Mitä syitä ilmiön syntymiseen tarvitaan? Onko sakissa jok671149Ei ole rohkeutta tulla jututtamaan
Voidaan me nähdä ja tervehtiä, sitäkin harvoin, mutta iso kynnys on edes mennä lähelle ja kysyä kuulumisia. Ymmärrät var81131