Hirdetés

Új hozzászólás Aktív témák

  • Gyuri16
    senior tag

    Sziasztok tudnátok segíteni mert nem jövök rá mi lehet a hiba.
    Van egy .txt fájl aminek a tartalma így néz ki:

    Kiss Gyula
    12a 11 13 12 13 12 13
    Nagy Judit
    12b 12 11 12 22 13 21

    C-be írtam egy programot ami vissza olvassa a fájl tartalmát ami működik csak duplán írja ki a szöveges fájl tartalmát.

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define N 100

    struct egydiak{
    char nev[N];
    char osztaly[N];

    int szovegszerk;
    int prezentacio;
    int weblap;
    int tablazatkezel;
    int adatbaziskezel;

    int informatika_ism_konyvtar_internet;

    }diakok[N];

    FILE *fbe;

    int i;
    int diakokszam;
    char osztbeker;

    main(){
    fbe=fopen("Informatika_kozepszintu_erettsegi.txt", "r");
    if(fbe==NULL){
    printf("Hiba a file megnyitasaban\n");
    getch();
    exit(0);
    }else{
    while(!feof(fbe)){
    fgets(diakok[diakokszam].nev,99,fbe);
    fgets(diakok[diakokszam].osztaly,4,fbe);
    fscanf(fbe,"%d %d %d %d %d %d",&diakok[diakokszam].szovegszerk,&diakok[diakokszam].prezentacio,&diakok[diakokszam].weblap,&diakok[diakokszam].tablazatkezel,&diakok[diakokszam].adatbaziskezel,&diakok[diakokszam].informatika_ism_konyvtar_internet);

    printf("Nev: %s\n",diakok[diakokszam].nev);
    printf("Osztaly: %s\n",diakok[diakokszam].osztaly);
    printf("Szovegszerkesztes: %d\n",diakok[diakokszam].szovegszerk);
    printf("Prezentacio es grafika: %d\n",diakok[diakokszam].prezentacio);
    printf("Weblapkészítés: %d\n",diakok[diakokszam].weblap);
    printf("Tablazatkezeles: %d\n",diakok[diakokszam].tablazatkezel);
    printf("Adatbazis-kezeles: %d\n",diakok[diakokszam].adatbaziskezel);
    printf("Informatikai alapismeretek, Konyvtarismeret es internethasznalat: %d\n",diakok[diakokszam].informatika_ism_konyvtar_internet);
    }
    }

    fclose(fbe);
    getch();
    }

    Nem jövök rá hogy miért írja ki duplán. Ha valaki tud segítsen.
    Előre is köszönöm :R
    Geri9159

    nem csak duplan irja ki, hanem rosszul. a baj az, hogy a fscanf hivas utan ottmarad a bemeneten egy ujsor karakter, amit a ciklus kovetkezo iteraciojaban a fgets megeszik, es csak azzal ter vissza. innen pedig az egesz eltolodik. en azt ajanlom egesz fajlt soronkent olvasd be, akkor nem lesz ilyen baj. a fscanf-s reszt helyettesitheted pl igy:
    char tmp[30];
    fgets(tmp, 30, fbe);
    sscanf(tmp,"%d %d %d %d %d %d",&diakok[diakokszam].szovegszerk,&diakok[diakokszam].prezentacio,&diakok[diakokszam].weblap,&diakok[diakokszam].tablazatkezel,&diakok[diakokszam].adatbaziskezel,&diakok[diakokszam].informatika_ism_konyvtar_internet);

    tovabba a fgets beolvassa az ujsor karaktert is, ezert a nev valtozodban az is ott lesz (feleslegesen) a vegen. ezert van a kimenetedben is egy sorkihagyas a nev alatt. ugyanez igaz az osztaly valtozodra is, de ott mivel limitalod a beolvasast 4 karakterre nem fer bele az ujsor, igy az jol mukodik, ha pontosan 3 karakter lesz a bemenet.

    mod: amit fentebb lineltem faq, ott ez is megvan valaszolva: [link]
    sok mas gyakori hibara is kiternek benne, erdemes atnezni

Új hozzászólás Aktív témák