Keresés

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

  • Dirty_Pio

    csendes tag

    Sziasztok, volna egy kis problemam egy programmal... eleg sok errort kidob, de en nem ertem mia baja. Az errorok a figgvenyekre vonatkoznak nagyreszben, azzal a szoveggel, hogy pl. az elso fuggvenybe x has a forward declaration. A feladat szovege:Write a program to add two large integer numbers of length up to 80 digits (no predefined type offers this range/precision !). One approach is to treat each number as an array of digits. The two integers (arrays) are added element by element, carrying from one element to the next when necessary. Each number is read digit by digit (a loop of getchar() until end of line is encountered) and stored in an array of digits.

    //program 5.6 (lab)
    #define MAX 81
    #include <stdio.h>
    #include <stdlib.h>
    int reading(int x[];int max)
    {
    int i,c;
    while (c=getchar()!=EOF)
    {
    x[i]=c-'0';
    i++;
    }
    i--;
    return i;
    }
    int add(int a; int b; int r)
    {
    int s;
    s=a+b+r;
    return s;
    }
    int reminder(int a; int b; int r)
    {
    int s;
    s=(a+b+r)/10;
    return s;
    }
    int main(void)
    {
    int i,j,k,r;
    int x[MAX],y[MAX],z[MAX];
    i=reading(x,MAX);
    j=reading(y,MAX);
    r=0;
    for (k=0; (k<=i) && (k<=j); k++)
    {
    z[k]=add(x[k],y[k],r);
    r=reminder (x[k],y[k],r);
    }
    if (i<j) for (k; k<=j; k++)
    {
    z[k]=add(0,y[k],r);
    r=reminder(0,y[k],r);
    };
    else
    for (k; k<=j; k++)
    {
    z[k]=add(0,x[k],r);
    r=reminder (0,x[k],r);
    };
    z[k++]=r;
    for (i=0;i<(k+1);i++)
    printf("%i \n",z[i]);
    system("pause");
    return(0);
    }
    na asszem megvan a baj... a figgvenybe ; hasznaltam , helyett grrr..

    [ Szerkesztve ]

  • Dirty_Pio

    csendes tag

    válasz Dirty_Pio #791 üzenetére

    Nos, a problemanak azt a felet megoldottam, amiert eredetileg ide irtam, de a javitott programban problemaim vannak a vektor ertekeinek a beolvasasaval, azaz minden esetben az vektor erteke -47 lesz. Beirom a javitott programot mert kozben voltak meg kissebb hibak a fentebbiben:
    //program 5.6 (lab)
    #define MAX 81
    #include <stdio.h>
    #include <stdlib.h>
    int reading(int x[],int max)
    {
    int i=0,k,c;
    while ((c=getchar()!=EOF)&&(i<max))
    {
    x[i]=c-'0';
    i++;
    }
    i--;
    return i;
    }
    int add(int a, int b, int r)
    {
    int s;
    s=(a+b+r)%10;
    return s;
    }
    int reminder(int a, int b, int r)
    {
    int s;
    s=(a+b+r)/10;
    return s;
    }
    int main(void)
    {
    int i,j,k,r;
    int x[MAX],y[MAX],z[MAX];
    for (k=0;k<80;k++)
    {
    x[k]=0;
    y[k]=0;
    }
    i=reading(x,MAX);
    j=reading(y,MAX);
    printf("%i %i\n",i,j);
    r=0;
    for (k=0; (k<=i) && (k<=j); k++)
    {
    z[k]=add(x[k],y[k],r);
    r=reminder (x[k],y[k],r);
    }
    if (i<j) for (i=k; i<=j; i++)
    {
    z[i]=add(0,y[i],r);
    r=reminder(0,y[i],r);
    }
    else
    for (j=k; j<=i; j++)
    {
    z[j]=add(0,x[j],r);
    r=reminder (0,x[j],r);
    }
    z[k++]=r;
    for (i=0;i<(k+1);i++)
    printf("%i \n",z[i]);
    system("pause");
    return(0);
    }

  • Dirty_Pio

    csendes tag

    válasz Jester01 #794 üzenetére

    Koszi a segitseget. A progi mukodik es huh.. jo sokmindent elneztem... szoval tenyleg ugy van hogy a gep azt csinalja amit mondunk neki s nem azt szeretnenk.

    [ Szerkesztve ]

  • Dirty_Pio

    csendes tag

    Na megint van egy kerdesem. Egy matrixot probalok beolvasni de azt a hibauzenetet kapom, hogy max1 was not declared in this scope. Az ha jol tudom valami oylasmit jelent hogy a fuggveny nem tudja ahsznalni mert kivul esik a hataskoren.
    #include <stdio.h>
    #include <stdlib.h>
    #define ROW 4
    #define COL 5
    int readnr (void)
    {
    int i=0;
    char x[5],c;
    while ( ((c=getchar()) != '\n') && (i<5))
    {
    x[i]=c;
    i++;
    }
    if (x[i-1]=='\n') x[i-1]='\0';
    else x[i]='\0';
    i = atoi(x);
    return i;
    }
    void mread (int max1, int max2, int q[max1][pmax2])
    {
    int i,j;
    for (i=0; i<=max1;i++)
    for (j=0; j<=max2; j++)
    q[i][j]=readnr;
    }
    printm (int max1, int max2, int q[max1][pmax2])
    {
    int i,j;
    for (i=0; i<=max1;i++)
    {
    for (j=0; j<=max2; j++)
    printf("%4i ",q[i][j];
    printf("\n");
    }
    }
    int main (void)
    {
    int max1=ROW,max2=COL;
    int a[ROW][COL];
    mread(max1,max2,a);
    printm(max1,max2,a);
    system("pasue");
    return(0);
    }

  • Dirty_Pio

    csendes tag

    válasz Jester01 #797 üzenetére

    Nos egy utolso hiba maradt amivel nem sikerult megbirkoznom: az mreadben amikor a q[i][j] -nek ertekul akarom adni a readnr fuggvegy erteket akkor kidobja azt az errort, hogy invalid conversion from 'int(*)()' to 'int '. Ez mit jelent es a masik dolog: miert nem fogadta el a ROW/COL helyett a max1/max2 -t ?

  • Dirty_Pio

    csendes tag

    válasz Jester01 #799 üzenetére

    Hi, erre nem igazan tudom a valaszt, hogy miert nem megy:

    #include <stdio.h>

    #include <stdlib.h>



    void create_and_fill_array2(int * a, int n) {

    a=(int *)malloc(sizeof(int)*n);

    int i;

    for (i=0; i<n; i++)

    *(a + i)=i;

    }

    void print_array(int *tab,int n) {

    int i;

    for (i=0; i<n; i++)

    printf("%d ",tab[i]);

    }



    int main (void) {

    int *b;

    create_and_fill_array2(b,5);

    print_array(b,5);

    return 0;

    }

    ha a figgvenyen kivul hasznalom a malloc() -t akkor nincsen semmi problema.

  • Dirty_Pio

    csendes tag

    Itt megint problemam van :

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXST 20
    #define MAXNL 50
    struct student {
    char *name;
    float mark;
    } ;
    int getname(char *p)
    {
    int i=0;
    char *q,c;
    q=p;
    while ( (c=getchar()!='\n') && i<MAXNL)
    {
    q[i]=c;
    i++;
    }
    q[i]='\0';
    return (i);
    }
    read_student ( struct student a, int n)
    {
    char *p;
    int i,e;
    p=malloc(sizeof(char)*MAXST);
    for (i=0;i<n;i++)
    {
    pritnf("\n the %i th student is:");
    e=getname(p);
    a[i].name=malloc(e*sizeof(char));
    a[i].name=*p;
    printf("\n mark for %s :",a[i].name);
    scanf("%i",&a[i].mark);
    }
    free(p);
    }
    pritnstudnets(struct student a, int n)
    {
    int i;
    stdnt *p;
    p=a;
    for (i=0;i<n;i++)
    printf("%s\n",a[i].*name);
    }

    int main(void){
    struct student a[MAXST];
    int nstdnt;
    printf("students nr is:");
    scanf("%i",&nstdnt);
    read_student(a,nstdnt);
    printstudenst(a,nstdnt);
    return(0);
    }

    NEm tudom hogy hogyan vonatkozzak egy sturkturaban levo pointerre

  • Dirty_Pio

    csendes tag

    Na... kozbe rajottem egy-ket nagyobb hibamra, szoval igy nez ki a javitott kod:

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXST 20
    #define MAXNL 50
    struct student {
    char *name;
    float mark;
    } ;
    int getname(char *p)
    {
    int i=0;
    char *q,c;
    q=p;
    while ( (c=getchar()!='\n') && i<MAXNL)
    {
    q[i]=c;
    i++;
    }
    q[i]='\0';
    return (i);
    }
    read_student ( struct student a[], int n)
    {
    char *p;
    int i,e;
    p=malloc(sizeof(char)*MAXST);
    for (i=0;i<n;i++)
    {
    pritnf("\n the %i th student is:");
    e=getname(p);
    a[i].name=malloc(e*sizeof(char));
    strcpy(a[i].name,p);
    printf("\n mark for %s :",a[i].name);
    scanf("%i",&a[i].mark);
    }
    free(p);
    }
    pritnstudnets(struct student a[], int n)
    {
    int i;
    struct student *p;
    p=a;
    for (i=0;i<n;i++)
    printf("%s\n",a[i].name);
    }

    int main(void){
    struct student a[MAXST];
    int nstdnt;
    printf("students nr is:");
    scanf("%i",&nstdnt);
    read_student(a,nstdnt);
    printstudenst(a,nstdnt);
    return(0);
    }

    A forditas elindul, de a lineker problemat talal a pritntf -ben a readstudent fuggvenyen belul, szovla mi a tehendom ?

  • Dirty_Pio

    csendes tag

    válasz gygabor88 #803 üzenetére

    Annak a printfnek semmi baja... amugy az ANSIC ben lehet hasznalni %i -t az integerek kiirasara, nem szukseges feltetlenul a %d (decimal) placeholder hasznalata. A masik printf -fel van baj: azzal amelyikben az a[i].name szerepel, es nem tudom hogy miert :az error igy hangzik: undefined reference to printf es a masodik a printstudentben is ugyanez az error jelentkezik. Es axitcode 1 el kilep a fordito.

  • Dirty_Pio

    csendes tag

    Sziasztok, volna egy problemam a kovetkezo feladatban :

    #include <stdio.h>
    #include <stdlib.h>
    enum star_type{ MA,BIN,VAR};
    typedef struct s{
    char name[51];
    enum star_type tp;
    union star{
    struct mai{
    unsigned char type:2;
    unsigned char age:2;
    char color[11];
    }m;

    struct bin{
    float r1;
    float r2;
    unsigned char t1:2;
    unsigned char t2:2;
    }b;
    struct var{
    float lowlmn;
    float highlmn;
    float period;
    }v;
    }u;
    }stars;
    int main(void){
    enum star_type a;
    int n,i;
    stars *x=malloc(sizeof(stars)*10);
    printf("which type of definition would you like to use for the stars?\n");
    scanf("%d",&a);
    printf("How many stars?(max 10)\n");
    scanf("%d",&n);
    for (i=0;i<n;i++){
    switch (a){
    MA:
    scanf("%50s",x.name);
    x.tp=a;
    scanf("%c %c %s",x.u.m.type, x.u.m.age, x.u.m.color);
    break;
    BIN:
    scanf("%50s",x.name);
    x.tp=a;
    scanf("%f %f %c %c",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
    break;
    VAR:
    scanf("%50s",x.name);
    x.tp=a;
    scanf("%f %f %f",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
    break;
    default break;
    };
    for (i=0;i<n;i++)
    switch (x.tp){
    MA:
    printf("%c %c %s\n",x.u.m.type, x.u.m.age, x.u.m.color);
    break;
    BIN:
    printf("%f %f %c %c\n",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
    break;
    VAR:
    printff("%f %f %f\n",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
    break;
    default break;
    };
    system("pause");
    return(0);
    }

    nos, azt az errort adja, hogy name is not a struct or union. Probaltam siman csak egy valtozoba beolvasni az elemeket de ugy meg amikor a unionba akarok olvasni akkor szepen elmegy vegtelenbe, szoval nem igazan tudom mihez kezdjek.

  • Dirty_Pio

    csendes tag

    válasz Dirty_Pio #837 üzenetére

    Kozbe reajottem egy-ket hibara szoval az uj kod mar igy nez ki

    #include <stdio.h>
    #include <stdlib.h>
    enum star_type{ MA,BIN,VAR};
    typedef struct {
    char name[51];
    enum star_type tp;
    union star{
    struct mai{
    unsigned char type:2;
    unsigned char age:2;
    char color[11];
    }m;
    struct bin{
    float r1;
    float r2;
    unsigned char t1:2;
    unsigned char t2:2;
    }b;
    struct var{
    float lowlmn;
    float highlmn;
    float period;
    }v;
    }u;
    }stars;
    int main(void){
    enum star_type a;
    int n,i;
    stars *x=(stars *)malloc(sizeof(stars)*10);
    printf("which type of definition would you like to use for the stars?\n");
    scanf("%d",&a);
    printf("How many stars?(max 10)\n");
    scanf("%d",&n);
    for (i=0;i<n;i++){
    switch (a){
    MA:
    scanf("%50s",x.name);
    x.tp=a;
    scanf("%c %c %s",x.u.m.type, x.u.m.age, x.u.m.color);
    break;
    BIN:
    scanf("%50s",x.name);
    x.tp=a;
    scanf("%f %f %c %c",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
    break;
    VAR:
    scanf("%50s",x.name);
    x.tp=a;
    scanf("%f %f %f",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
    break;
    default break;
    };
    for (i=0;i<n;i++)
    switch (x.tp){
    MA:
    printf("%c %c %s\n",x.u.m.type, x.u.m.age, x.u.m.color);
    break;
    BIN:
    printf("%f %f %c %c\n",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
    break;
    VAR:
    printff("%f %f %f\n",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
    break;
    default break;
    };
    system("pause");
    return(0);
    }

    de meg mindig nem megy :)

  • Dirty_Pio

    csendes tag

    válasz Jester01 #839 üzenetére

    Koszi. Meg volna egy kerdesem : mivel olvassam be az adatokat, mert a scanf elcseszi nekem eleg rendesen, mivel a buffert szepen betologatja az adatok helyere es nincs igazan semmi 5letem mit hasznaljak helyette, mar azon kivutl johu irok egy fuggvenyt ami szepen beolvassa a getchar() ral a neveket meg a kulonbozo szovegeket. Akkor mukodne ha csak a scanf() -el a szamokat olvasnam be?

  • Dirty_Pio

    csendes tag

    Sziasztok, az volna a kerdesme, hgoy hogyan tudok egy binaris filebol kiolvasni szamokat. Azaz ha meg van adva hogy pl. az elso 2 byteon van egy szam ami egy tulajdonsagat jeloli a filenak aminek majd a feldolgozas soran veszem hasznat, es utana meg byteonkent vannak mas szamok( ha jol tudom igy maximum 0-255 intervallumba lehetnek). Szoval az a kerdesem hogy hogyna csinalok ezekbol a byteokbol ujra szamokat? Esetleg ha tudtok kuldeni egy tenyleg osszetett es ertelemse leirast a binaris filokkal valo dolgozasrol c ben szovesen vennem.

  • Dirty_Pio

    csendes tag

    Ok, rajottem a dologra, szal en allapitom meg hogy miylen tipusu memoriamezobe olvasom be a fielbol a byteot es azt is, hogy hany byteot akarok ott latni. A kerdesem az lenne, hogy ha tegyuk fel en csak egy 1 byteon abrazolt szamot akarok kiolvasni es short intet hasznalok ami 2 bytet folglal, akkor a tobbit keegesziti 0-kal a program? Amugy a dolog azert kellett, hogy egy binaris fileban levo adatokbol kirajzoljak egy kepet a kepernyore.

  • Dirty_Pio

    csendes tag

    Sziasztok! Ki kellene szamolnom az Euler fele szam adott hatvanyat. Rekurzioval oldottam meg a dolgot:

    #include <stdio.h>

    int ex(int n, int x)
    {
    if (n>0) return x*ex(n-1,x);
    else return 1;
    }
    int fact(int n)
    {
    if (n>0) return n*fact(n-1);
    else return 1;
    }
    float xex(int n, int x)
    {
    float q;
    if (n>0) {q=(float)ex(n,x)/fact(n);
    printf("%f \n",q);
    return q+xex(n-1,x);
    }
    else return 1;
    }
    int main(void)
    {
    int x,n;
    scanf("%d",&x);
    printf("%f",xex(x,x));
    system("pause");
    return 0;
    }

    Amint latjatok, a Taylor polinom ahsznalataval probaltam megoldani a dolgot, de az eredmeny hibas. Tudnatok segiteni?

  • Dirty_Pio

    csendes tag

    válasz Jester01 #943 üzenetére

    Szoval ha ki szeretned szamitani az Euler-fele szam egyik x-ik hatvanyat( e^x -t ), akkor az a dolgod, hogy veszed a Taylor fele felbontasat a szamnak, ami lenyegebe a megoldas: e^x=1+e^1/1!+e^2/2!+e^3/3!+... egeszen egy megfeleloen nagy szamig. Es magyarazas kozbe ra is jottem mi is a problema, azaz en nem valasztottam eleg nagy szamot azaz enm eleg pontos az osszegem, mivel az elso x db szamot vettem igy ha mondjuk az e^4-t szeretnem kiszamolni csak az osszeg elso 4 tagjat veszem, es a kovetkezo szamok nem eleg kicsik ahhoz, hogy lehanyagolhato legyen. A kodban a kovetkezo javitasokat eszkozoltem :

    #include <stdio.h>

    int ex(int n, int x)
    {
    if (n>0) return x*ex(n-1,x);
    else return 1;
    }
    int fact(int n)
    {
    if (n>0) return n*fact(n-1);
    else return 1;
    }
    float xex(int n, int x)
    {
    float q;
    if (n>0) {q=(float)ex(n,x)/fact(n);
    // printf("%f \n",q);
    return q+xex(n-1,x);
    }
    -->>else return 0;<<-- mivel igy ketszer szamolna a 0 faktorialist h
    }
    int main(void)
    {
    int x,n;
    scanf("%d",&x);
    ->>printf("%f",xex(32,x)); <<- ennyit bit meg a float vagy a memoria... ha nagyobb pontossaggal probalkozok akkor errort kapok. Mondjuk igy sem olyan pontos a szamitas, mint amilyent a google mutat, de azt hiszem nincs mar mas hiba. Ha ti talaltok szoljatok!
    system("pause");
    return 0;
    }

  • Dirty_Pio

    csendes tag

    Sziasztok, mi itt a baj, a file ugy nez, ki, hogy az elso sorban a sorok(oszlopok) szama van es a tobbiben emg szunettel elvalasztva a matrix elemei.

    #include <stdio.h>
    #include <stdlib.h>

    int main(void)
    {
    FILE *f;
    int n,i,j;
    if ( !(f=fopen("input.in","r")) ) {
    printf("no input file found");
    exit (1);
    }
    fscanf(f,"%d",&n);
    int x[n][n];
    for (i=0;i<n;i++)
    {
    for (j=0;j<n;j++)
    fscanf(f,"%d",x[i][j]);
    //fgetc(f); - ez kell-e az enter beolvasasara? Ha hagyom ugyse megy szoval ki kene segitsetek.
    }
    for (i=0;i<n;i++)
    {
    for (j=0;j<n;j++)
    printf("%3d",x[i][j]);
    printf("\n");
    }
    close(f);
    system("pause");
    return 0;
    }

  • Dirty_Pio

    csendes tag

    Hihetetlen de mindig az ilyen huesegeken akadok fent: szoval van egy file es be kene olvasni belole par adatot, az elso sorban egy lebegopontos valtozo(k) van es egy egesz tipusu(n) szunettel elvalasztva. N a kovetkezo ket sorban tallahato elemek szamat adja meg. A kovetkezo sorban n darab lebegopontos valtozo van es az azt koveto sorban n darab egesz. a kodom igy nez ki:

    #include <stdio.h>
    #include <stdlib.h>

    int main(void)
    {
    FILE *f;
    int n,i;
    float k;
    if ( !(f=fopen("thief.in","r")) ){
    printf("error input file");
    exit (1);
    }
    fscanf(f,"%f %d",&k,&n);
    int v[n];
    float d[n];
    for (i=0;i<n;i++)
    {
    fsncaf(f,"%d",&v[i]);
    printf("%d ",v[i]);
    }
    for (i=0;i<n;i++)
    {
    fsncaf(f,"%f",&d[i]);
    printf("%f ",d[i]);
    }
    close(f);
    return 0;
    }

    A program nem, a kovetkezo errorra hivatkozva: [Linker error] undefined reference to'fscanf'. Ha jo tudom az fscanf a stdio.h header filebe van definialva szoval kene menjen nem?

  • Dirty_Pio

    csendes tag

    Sziasztok, akarok irni egy nagyjabol katalogizalo programot ami eloszor megnyit egy data.txt fielot amiben el vannak mentve a katalogus elemei es a kodjai. A felhasznalo ezutan beirja a kodjat a kivant reszlegnek ami utan a program megnyitja a filet amibe az elemek vannak, es ki is iratja a kepernyore. Ezutan rakerdez hogy akarok-e hozzaadni uj elemet vagy meglevot kitorolni.Minden reszleg, azaz file elso soraba el van mentve hogy hany elem van benne. A problemam az lenne hogy amikor ki akarok torolni egy elemet akkor azt ugy oldalam meg hogy szepen az alatta levo sortol kezdodoen mindent ramasolnak es az utolso sort pedig elhagynam. Itt a kod

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>

    struct tm * timeinfo;

    int rm(FILE *f)
    {
    fseek(f,0,0);
    char buff[255];
    int max,linelen,n;
    fgets(buff,100,f);
    max=atoi(buff);
    printf("type the nr of the product");
    scanf("%i",&n);
    printf("the number %i, and max %i",n,max);
    while (n>0)
    {
    fgets(buff,250,f);
    n--;
    }
    fgets(buff,250,f);
    while (fgets(buff,250,f))
    {
    linelen=strlen(buff);
    fseek(f,-linelen,1);
    fprintf(f,"%s",buff);
    };
    return 0;
    }

    int add(FILE *f)
    {
    char name[20],price[15],buff[101]="",*s;
    int linelen,max;
    fseek(f,0,0);
    fgets(buff,19,f);
    max=atoi(buff);
    max++;
    // printf("max=%i",max);
    fseek(f,0,0);
    fprintf(f,"%i\n",max);
    fseek(f,0,2);
    time_t rawtime;
    time(&rawtime);
    timeinfo=localtime(&rawtime);
    s=asctime(timeinfo);
    s[strlen(s)-1]='\0';
    fprintf ( f,"\n %i %s ",max,s);
    fseek(f,1,1);
    gets(buff);
    printf("product name:");
    scanf("%s",name);
    fprintf(f," %s ",name);
    printf("product prince:");
    gets(buff);
    scanf("%s",price);
    fprintf(f," %s",price);
    return 0;
    }

    int list(FILE *f)
    {
    fseek(f,0,0);
    char c;
    fgetc(f);
    while( (c=fgetc(f))!=EOF)
    {
    putchar(c);
    }
    printf("\n");
    return 0;
    }

    int main(void)
    {
    FILE *f,*g;
    if (!(g=fopen("data.txt","r"))) {
    printf("missing data file");
    exit (1);
    }
    char s[3],c;
    int a=1;
    list(g);
    fclose (g);
    while (a)
    {
    printf("\nchoose the code of the product type\n");
    scanf("%s",s);
    if (strlen(s)==2)
    switch (s[strlen(s)-1])
    {
    case '1' :
    if (!(f=fopen("a1.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '2' :
    if (!(f=fopen("a2.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '3' :
    if (!(f=fopen("a3.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '4' :
    if (!(f=fopen("a4.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '5' :
    if (!(f=fopen("a5.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '6' :
    if (!(f=fopen("a6.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '7' :
    if (!(f=fopen("a7.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    default :
    printf("wrong code\n");
    }
    }
    list(f);
    a=1;
    while (a)
    {
    printf("press 1 to add an element, 2 to remove one and 0 to exit");
    scanf("%i",&a);
    switch(a)
    {
    case 1:
    add(f);
    break;
    case 2:
    rm(f);
    break;
    default :break;
    }
    }
    fclose (f);
    return 0;
    }

    Az rm fuggveny oldana meg a torlest, de ehelyett vegtelen ciklusba kot ki es egyre csak noveli a file meretet. Egy peldat is mellekelek:

    file data.txt:
    code name
    a1 = PC/notebook/server
    a2 = cash register/balance
    a3 = software
    a4 = Husqvarna
    a5 = audio systems
    a6 = home/car security
    a7 = PC/camera accesorries

    file a3.txt
    4
    nr. __date__ __product_name__ ___price___
    1 Mon Oct 05 17:13:14 2009 elem1 1234
    2 Mon Oct 05 17:13:22 2009 elem2 3214
    3 Mon Oct 05 17:13:28 2009 elem3 2114
    4 Mon Oct 05 17:13:33 2009 elem4 2145

    Es ha tudtok jol fogna egy modszer amivel szepen kozepre tudom amjd igazitani a fielba, mert eddig nekem csak az jutott az eszembe hogy mindig fix szamu karakter keruljon minden nev ala. ELore is kosz.

  • Dirty_Pio

    csendes tag

    Sziasztok, van egy kis problemam a listakkal c -ben. Nem a hagyomanyos pointeres modon szeretnem megoldani a feladatot, azaz letrehozni egy listat es kivenni, beletenni elemeket es kiiratni, hanem a kurzoros megoldassal, amikor egy listat vektor segitsegevel szimulalsz. Itt jon a kod:

    #include <stdio.h>
    #include <stdlib.h>

    #define maxlen 100


    typedef char tipcursor;

    typedef int tipnod;

    typedef struct tipelem{
    tipnod element;
    tipcursor next;
    }tipelement;

    typedef tipcursor tiplista;


    void init(tipelement z[maxlen])
    {
    int i;
    for (i=0;i<maxlen-1;i++)
    z[i].next=i+1;
    z[maxlen].next=-1;
    }

    tiplista add(tiplista *d,tiplista p,tipelement z[maxlen],tipnod e)
    {
    if (p==-1) {
    p=*d;
    z[*d].element=e;
    *d=z[*d].next;
    z[p].next=-1;
    }
    else{
    tipcursor k=p;
    while ((z[k].element<e)&&(k!=-1)&&(z[k].next!=-1))
    {
    k=z[k].next;
    }
    tipnod temp;
    while (k!=-1)
    {
    temp=z[k].element;
    z[k].element=e;
    e=temp;
    if(-1==(k=z[k].next)) z[k].next=*d;
    }

    z[*d].element=e;

    temp=*d;
    *d=z[*d].next;

    z[temp].next=-1;
    }
    return p;
    }

    void list(tiplista s,tipelement z[maxlen])
    {
    while (s!=-1)
    {
    printf("%i ",z[s].element);
    printf("%i ",z[s].next);
    s=z[s].next;
    }
    }

    int main(void)
    {
    tipelement zona[maxlen];

    tiplista l=-1,m=-1,*disp;
    disp=(tiplista*)malloc(sizeof(tiplista));
    *disp=0;

    init(zona);

    l=add(disp,l,zona,16);
    l=add(disp,l,zona,5);
    list(l,zona);
    l=add(disp,l,zona,41);
    list(l,zona);
    return 0;
    }

    Nos a problemam az, hogy a program nem helyezi jol be az elemeket a helyukre, azaz miutan betettem a 16-ost utana az o helyere teszi az 5-t, de nem tolja arrebb a 16-t, pedig az add fuggvenybe minden jol megy, csak kiirataskor mar nem oks a lista.

    Elore is koszonom.

    [ Szerkesztve ]

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