Thread: bus error

  1. #1
    Registered User
    Join Date
    Apr 2013
    Posts
    1

    bus error

    i keep getting a bus error but i don't know why

    Code:
    #include <stdio.h>
    #include <string.h>
    
    
        typedef struct data
        {
          char student[10];
          int scores[4];
          char alp_grd; 
          float avg_grd;
        } dat_t;
    
    
      void avg_score (dat_t student_t[13]);
      void letter_grd (dat_t student_t[13]);
      void results(dat_t student_t[13]);
      void sort_avg(dat_t student_t[13]);
    int main(void)
    {
      dat_t student_t[13];
      FILE *fp;
      int s=0;
      int n=0;
    
    
      printf("\n Reading the name file\n");
      fp = fopen("student.dat", "r");
      
      for(n=0;n<13;n++)
      {
        fscanf(fp,"%s",&student_t[n].student);
      }
      fclose(fp);
      
      printf("\n Reading the scores file\n");
      fp = fopen("scores.dat", "r");
     
    
    
      for(n=0;n<13;n++)
      {
        for(s=0;s<4;s++)
        {
          fscanf(fp,"%d",&student_t[n].scores[s]);
        }
      }
      fclose(fp);
    
    
     avg_score(student_t);
    
    
     letter_grd(student_t);
    
    
     sort_avg (student_t);
    
    
     results(student_t);
    
    
     return(0);
    }
    
    
     
     void avg_score(dat_t student_t[13])
    {
      int n,s;
      float sum = 0, average = 0;
      
      for(n=0;n<13;n++)
      {
        for(s=0;s<4;s++)
        { 
          sum = sum + student_t[n].scores[s];
        }
        average = sum / 4;
        student_t[n].avg_grd = average;
        sum = 0;
      }
    }
    
    
    void letter_grd (dat_t student_t[13])
    {
      int s;
    
    
      for(s=0;s<13;s++)
      {
        if(student_t[s].avg_grd>=90)
          student_t[s].alp_grd = 'A';
        else if((student_t[s].avg_grd>=80)&&(student_t[s].avg_grd<90))
          student_t[s].alp_grd = 'B';
        else if((student_t[s].avg_grd>=70)&&(student_t[s].avg_grd<80))
          student_t[s].alp_grd = 'C';
        else if((student_t[s].avg_grd>=65)&&(student_t[s].avg_grd<70))
          student_t[s].alp_grd = 'D';
        else if(student_t[s].avg_grd<65)
          student_t[s].alp_grd = 'F';
      }
    }
    
    
    void results(dat_t student_t[13])
    {
      int s,n;
    
    
      printf("\n\nName\t Exam1   Exam2   Exam3   Exam4    Averag  letter Grade\n\n");
    
    
      for(s=0;s<13;s++)
      {
        printf("%-s\t ", student_t[s].student);
        for(n=0;n<4;n++)
        {
          printf("%-2d\t ", student_t[s].scores[n]);
        }
        printf(" %-3.2f\t\t%-c \n", student_t[s].avg_grd,student_t[s].alp_grd);
      }
    }
    
    
    void sort_avg(dat_t student_t[13])
    {
      dat_t temp;
      int i,j,min;
    
    
      for ( i = 0 ; i < 12 ; i++ )
      {
        for ( j = i+1 ; 13-i ; j++ ) 
        {
          if (student_t[i].avg_grd < student_t[j].avg_grd)
          {
            temp = student_t[j];
            student_t[j] = student_t[i];
            student_t[i] = temp;
          }
        }  
      }  
    }

  2. #2
    Registered User
    Join Date
    Sep 2006
    Posts
    8,868
    That's a substitution sort, but this part is incorrect:
    Code:
     for ( j = i+1 ; 13-i ; j++ )      //13-i??
    Because 13-i will always resolve to TRUE (non-zero), so the loop will never quit.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Replies: 6
    Last Post: 10-29-2012, 03:33 AM
  2. Replies: 15
    Last Post: 11-28-2011, 11:48 AM
  3. Replies: 4
    Last Post: 07-24-2011, 09:38 PM
  4. Replies: 1
    Last Post: 11-15-2010, 11:14 AM
  5. Replies: 3
    Last Post: 10-02-2007, 09:12 PM