2012-08-08 76 views
0

我差不多完成了我的程序。问题是,我在指针调试过程中遇到了一些小麻烦。我想要一些帮助我如何解决它。请注意,我确实需要我所有的函数原型。 (分配本来如果我能做主的一切,虽然容易得多...)调试程序

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

#define STUDENTS 5 

int getData(int *student, char *pass, int *hw1, int *hw2, int *hw3, int *hw4, 
      int *hw5, int *hw6, int *hw7, int *mid1, int *mid2, int *final, 
      int *extra); 
float calcAvg(float *total); 
float printTable(int student, float total); 

int main(void) 

{ 
    int student[STUDENTS]; 
    char pass[STUDENTS]; 
    int hw1[STUDENTS], hw2[STUDENTS], hw3[STUDENTS], hw4[STUDENTS], hw5[STUDENTS], hw6[STUDENTS], hw7[STUDENTS]; 
    int mid1[STUDENTS], mid2[STUDENTS]; 
    int final[STUDENTS]; 
    int extra[STUDENTS]; 
    float total[STUDENTS]; 

    getData(student, pass, hw1, hw2, hw3, hw4, hw5, hw6, hw7, 
      mid1, mid2, final, extra); 
    calcAvg(total); 
    printTable(student, total); 

system("pause"); 
return 0; 
} 

int getData(int *student, char *pass, int *hw1, int *hw2, int *hw3, int *hw4, 
      int *hw5, int *hw6, int *hw7, int *mid1, int *mid2, int *final, 
      int *extra) 
{ 
    FILE *fpIn; 
    int i; 

    fpIn = fopen("data.txt", "r"); 
    if (!fpIn) 
    { 
     printf("File does not exist."); 
     system("pause"); 
     exit (101); 
    } 

    for (i=0; i<STUDENTS; i++) 
    { 
     fscanf(fpIn, "%d", &student[i]); 
     fscanf(fpIn, "%c", &pass[i]); 
     fscanf(fpIn, "%d %d %d %d %d %d %d", hw1[i], hw2[i], hw3[i], hw4[i], hw5[i], hw6[i], hw7[i]); 
     fscanf(fpIn, "%d %d", mid1[i], mid2[i]); 
     fscanf(fpIn, "%d %d", final[i], extra[i]); 
    } 

    return; 
} 

float calcAvg(float *total) 
{ 
    int hwtotal[STUDENTS], midtotal[STUDENTS]; 
    int i; 

    for (i=0; i<STUDENTS; i++) 
    { 
     hwtotal[i] = hw1[i]+ hw2[i]+hw3[i]+hw4[i]+hw5[i]+hw6[i]+hw7[i]; 
     midtotal[i] = mid1[i]+mid2[i]; 
     total[i] = (hwavg[i]+midavg[i]+final[i]+extra[i])/3; 
    } 

    return total; 
} 

float printTable(int student, float total) 
{ 
    int i; 

    printf("==== ======= =======\n"); 
    printf(" ID Score Grade\n"); 
    printf("==== ======= =======\n"); 

    for(i=0; i<STUDENTS; i++) 
    { 
     printf("%d .1f ", student[i], total[i]); 

     if (total>90) 
     printf("A\n"); 
     else if(total>80); 
     printf("B\n"); 
     else if (total>70); 
     printf("C\n"); 
     else if (total>60); 
     printf("D\n"); 
     else 
     printf("F\n"); 
    } 

    return; 
} 
+1

问题是什么 - 您看到哪些错误? – mathematician1975 2012-08-08 19:12:39

+0

你有什么问题?你能描述一下正在发生的事情吗,你想对它有什么不同?你究竟在调试什么? – corsiKa 2012-08-08 19:12:44

+6

getData(..)参数让我想哭。 – Inisheer 2012-08-08 19:17:38

回答

2

我建议你创建一个结构来封装学生的所有信息,而不是因为你是每一个数据不同的阵列存储。

struct{ 
    int studentId; 
    char pass; 
    int hw[7] 
    int mid[2]; 
    int final; 
    int extra; 
    float total; 
} student; 

student mystudents[STDENTS]; 

无论你的问题是,它会更容易与更紧凑的数据结构,也将缓解,如果必须进行任何更改检测。

+0

在这一个,我不能使用结构。对不起,抬起头来。 – 2012-08-08 19:26:56

+0

然后请解释您的具体问题。 – Picarus 2012-08-08 19:32:55

0

那么,你没有描述你的问题,但它看起来像这部分可能会导致问题。

int getData(...) { 
    ... 
    fscanf(fpIn, "%d %d %d %d %d %d %d", hw1[i], hw2[i], hw3[i], hw4[i], hw5[i], hw6[i], hw7[i]); 
    fscanf(fpIn, "%d %d", mid1[i], mid2[i]); 
    fscanf(fpIn, "%d %d", final[i], extra[i]); 
    ... 
} 

你传入int s到fscanf其预计int *秒。您之前做过正确的事

fscanf(fpIn, "%d", &student[i]); 
fscanf(fpIn, "%c", &pass[i]);