调试程序
问题描述:
我差不多完成了我的程序。问题是,我在指针调试过程中遇到了一些小麻烦。我想要一些帮助我如何解决它。请注意,我确实需要我所有的函数原型。 (分配本来如果我能做主的一切,虽然容易得多...)调试程序
#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;
}
答
我建议你创建一个结构来封装学生的所有信息,而不是因为你是每一个数据不同的阵列存储。
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
答
那么,你没有描述你的问题,但它看起来像这部分可能会导致问题。
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]);
问题是什么 - 您看到哪些错误? – mathematician1975 2012-08-08 19:12:39
你有什么问题?你能描述一下正在发生的事情吗,你想对它有什么不同?你究竟在调试什么? – corsiKa 2012-08-08 19:12:44
getData(..)参数让我想哭。 – Inisheer 2012-08-08 19:17:38