| 
                                         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]
					
 
  
					
					
					
				 |