ongelma tiedoston ensimmäisen numeron

kasvattamisessa yhden suure...

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ä.)

5

536

    Vastaukset 5

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. Mikä on totta mikä ei?

      Onko juoru vai ei että nimeltä mainitsematon henkilö on tehnyt naiselle/naisille jotain joka on väärin?
      Kuhmo
      25
      1888
    2. Lopetetaanko tämä

      Juttu ja mennään eteenpäin? Pystytkö?
      Ikävä
      127
      860
    3. Just saying

      Mies joka antaa naiselle turvallisen olon, on seksikäs. Ei kieroja kikkoja ja haluaa olla vain sen yhden naisen mies.
      Ikävä
      123
      657
    4. Voisin antaa sulle nyt

      Halin❤️
      Ikävä
      54
      598
    5. Löytyikö syy miksi Martina on Muhiksen kanssa

      Saipa naurut Gekkosen kuvasta, missä ovat ravintola Hookissa Immu fight night ottelun jälkeen, Muhoksella pullottaa hirv
      Kotimaiset julkkisjuorut
      90
      555
    6. Tosi kiva on

      Joo. Mitä olisit menettänyt jos olisit paljastanut itsesi?
      Ikävä
      65
      541
    7. Jos selviäisi että kaivattusi

      Olisi savant asperger? Rakastaisitko vielä? Savant-lahjakkuus olisi kapea-alaista neroutta liittyen mekanisiin ja tilan
      Ikävä
      88
      540
    8. Tehdään yhdessä itsestämme

      Parhaat versiot❤️ Se vaatii molemmilta hyvää itsetuntoa!
      Ikävä
      42
      525
    9. Päivän aivopieru Trumpilta

      Trump julisti sodan hyttysiä vastaan. Myös punkit ovat Trumpin sodan kohteena. Eikö vieläkään USA:n kansa tajua tuon uko
      Maailman menoa
      63
      503
    10. Jokin ei täsmää

      Joskus yksi vuosiluku saa katsomaan koko tarinaa uudestaan. Löysin gradun. Matematiikka ei oikein täsmää siihen, mitä mi
      Ikävä
      267
      480
    11. Oliko Jani Halmeen aika jo tippua TTK:sta?

      Jani Halme ja Claudia Ketonen joutuivat jättämään TTK:n. Halme ja Ketonen saivat viimeiseksi jäänestä tanssista, sambas
      Tanssii tähtien kanssa
      26
      474
    12. Janpen Thai lopettanut, miksiköhän

      Hyvää apetta teki.
      Suomussalmi
      9
      466
    13. Toivotko vielä viestiä

      Minulta? En rohkene enää ottaa yhteyttä, kun varmasti jo uusia naisia elämässä. Nolaisin vain itseni.
      Ikävä
      34
      463
    14. Jorma Uotinen läväytti härskin heiton - Paljastus uudesta TTK-romanssista?

      Tuomari Jorma Uotisen linja on välillä hyvinkin rohkea TTK:ssa. Hän näpäytti Jaakko Parkkalille ja Kastanja Rauhalalle v
      Tanssii tähtien kanssa
      9
      439
    15. Kuka kaipaa T m?

      Kerro nainen kirjaimesi vaan... Haluan miettiä kuka tulee ekana mieleeni.. kuin kurkistus tunteiden meren pinnalle, jota
      Ikävä
      31
      435
    16. Miksi jotku naiset on niin tyhmiä

      Että elättelevät turhaa toivoa toisen kustannuksella. Onko ne kaikki kaappilesboja vai mikä niitä vaivaa? Sitten itketä
      Ikävä
      51
      425
    17. Vaikea on tämän

      Jälkeen suhtautua sinuun ilman ettei muista kirjoituksiasi.
      Ikävä
      58
      422
    18. Kerro muuten miksi

      Estit somessa?
      Ikävä
      41
      416
    19. Jätä jo se puolisosi, mun kanssa kilpa-asetelma on tuhoisa.

      Eikä hän tule sitä voittamaan. Myöskään missään vanhassa ei kannata roikkua, koska ei uskalla kohdata muutosta, hyvät as
      Ikävä
      27
      406
    20. S-ryhmän vastuullisuuden kaksoisstandardi

      Vastuullisuuspuhe on helppoa. Vaikeampaa on selittää, miksi S-ryhmän omien merkkien tuotteita ja raaka-aineita hankitaan
      Maailman menoa
      6
      395
    Aihe