Pozdrav, može pomoć oko zadatka 8.1.45. iz Šegine Skripte za Prog2?
U uputi kaže da argument list mora bit tipa team**. Ne razumijem zašto nije team*, to mi se čini logičnije.
Ovo je moj kod za koji mi ne javlja nikakvu grešku ali kad pokrenem i unesem nazive datoteka, ruši se. :(
Unaprijed hvala!
[code:1]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char name[51];
int score;
}team;
int teamInd (char name[],team *list,int *n)
{
int i;
for(i=0;i<(*n);i++) if(strcmp(name, list[i].name)==0)return i;
list=(team*)realloc(list,((*n)+1)*sizeof(team));
strcpy(list[i].name,name);
list[(*n)].score=0;
(*n)++;
return i;
}
void football(char iname[],char oname[])
{
FILE *in,*out;
int n=0,s1,s2,i1,i2;
team *list;
list=(team*)malloc(sizeof(team));
char t1[51],t2[51];
in=fopen(iname,"rt");
if(in==NULL){printf("GReska!");exit(-1);}
out=fopen(oname,"wt");
if(out==NULL){printf("GReska!"); fclose(in); exit(-2);}
int k=fscanf(in,"%[^:]:%[^=]=%d:%d ",t1,t2,&s1,&s2);
if(k!=4){printf("Greska!");exit(-3);}
while(k==4)
{
i1=teamInd(t1,list,&n);
i2=teamInd(t2,list,&n);
if(s1<s2) list[i2].score+=3;
else if(s1>s2) list[i1].score+=3;
else{ list[i1].score++;
list[i2].score++;}
}
fclose(in);
for(i1=0;i1<n;i1++)
for(i2=i1+1;i2<n;i2++)
if(list[i1].score<list[i2].score){
team tmp=list[i1];
list[i1]=list[i2];
list[i2]=tmp;
}
for(i1=0;i1<n;i1++)
fprintf(out, "%d. %s (%d)\n",i1+1, list[i1].name,list[i1].score);
free(list);
fclose(out);
}
int main (void)
{
char ime1[20],ime2[20];
printf("Upisi ime ulazne datoteke:");
scanf("%s",ime1);
printf("Upisi ime izlazne datoteke:");
scanf("%s",ime2);
football(ime1,ime2);
return 0;
}
[/code:1][/b]
Pozdrav, može pomoć oko zadatka 8.1.45. iz Šegine Skripte za Prog2?
U uputi kaže da argument list mora bit tipa team**. Ne razumijem zašto nije team*, to mi se čini logičnije.
Ovo je moj kod za koji mi ne javlja nikakvu grešku ali kad pokrenem i unesem nazive datoteka, ruši se.
Unaprijed hvala!
Kod: |
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char name[51];
int score;
}team;
int teamInd (char name[],team *list,int *n)
{
int i;
for(i=0;i<(*n);i++) if(strcmp(name, list[i].name)==0)return i;
list=(team*)realloc(list,((*n)+1)*sizeof(team));
strcpy(list[i].name,name);
list[(*n)].score=0;
(*n)++;
return i;
}
void football(char iname[],char oname[])
{
FILE *in,*out;
int n=0,s1,s2,i1,i2;
team *list;
list=(team*)malloc(sizeof(team));
char t1[51],t2[51];
in=fopen(iname,"rt");
if(in==NULL){printf("GReska!");exit(-1);}
out=fopen(oname,"wt");
if(out==NULL){printf("GReska!"); fclose(in); exit(-2);}
int k=fscanf(in,"%[^:]:%[^=]=%d:%d ",t1,t2,&s1,&s2);
if(k!=4){printf("Greska!");exit(-3);}
while(k==4)
{
i1=teamInd(t1,list,&n);
i2=teamInd(t2,list,&n);
if(s1<s2) list[i2].score+=3;
else if(s1>s2) list[i1].score+=3;
else{ list[i1].score++;
list[i2].score++;}
}
fclose(in);
for(i1=0;i1<n;i1++)
for(i2=i1+1;i2<n;i2++)
if(list[i1].score<list[i2].score){
team tmp=list[i1];
list[i1]=list[i2];
list[i2]=tmp;
}
for(i1=0;i1<n;i1++)
fprintf(out, "%d. %s (%d)\n",i1+1, list[i1].name,list[i1].score);
free(list);
fclose(out);
}
int main (void)
{
char ime1[20],ime2[20];
printf("Upisi ime ulazne datoteke:");
scanf("%s",ime1);
printf("Upisi ime izlazne datoteke:");
scanf("%s",ime2);
football(ime1,ime2);
return 0;
}
| [/b]
|