2012-08-08 100 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]);