Suomi24 Keskustelussa on viikonlopun aikana ollut poikkeuksellisen paljon bottien automaattiseti luomia kommentteja. Pahoittelemme tästä aiheutunutta harmia. Olemme kiristäneet Keskustelujen suojausasetuksia ja kommentointi on toistaiseksi estetty ulkomailta.

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

427

    Vastaukset

    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. Millä voin

      Hyvittää kaiken?
      Ikävä
      69
      2237
    2. Jotain puuttuu

      Kun en sinua näe. Et ehkä arvaisi, mutta olen arka kuin alaston koivu lehtiä vailla, talven jäljiltä, kun ajattelen sinu
      Ikävä
      101
      2063
    3. Haluan sut

      Haluatko sinä vielä mut?
      Ikävä
      78
      1668
    4. Hei A, osaatko

      sanoa, miksi olet ihan yhtäkkiä ilmestynyt kaveriehdotuksiini Facebookissa? Mitähän kaikkea Facebook tietää mitä minä en
      Ikävä
      41
      1490
    5. Haluaisin aidosti jo luovuttaa ja unohtaa

      Ei tästä mitään tule koskaan.
      Ikävä
      78
      1486
    6. Ampuminen Iisalmessa

      Älytöntä on tämä maailman meno.
      Iisalmi
      10
      1387
    7. Pohjola kadulla paukuteltu

      Iltasanomissa juttua.
      Iisalmi
      31
      1354
    8. 52
      1248
    9. Synnittömänä syntyminen

      Helluntailaisperäisillä lahkoilla on Raamatunvastainen harhausko että ihminen syntyy synnittömänä.
      Helluntailaisuus
      62
      1190
    10. Mitä tämä tarkoittaa,

      että näkyy vain viimevuotisia? Kirjoitin muutama tunti sitten viestin, onko se häipynyt avaruuteen?
      Ikävä
      28
      1179
    Aihe