problem with pointers in my function

I'm pretty new to C and it seems like the only thing that is breaking my code is my lack of knowledge of pointers. I tried the beginner forum but no one can help. Here is my code: At the bottom is my grades.txt file. I would appreciate any kind of help...thanks

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



main()
{

FILE* fipoint;
double StudentGrades[20][3];
char StudentNames[20][9];
int x = 0,studentnum1;

double* grades;
char* names;
grades=StudentGrades;
names=StudentNames;


void minimum(char names_array[20][9], double grades_array[20][3]);
void maximum(char names_array[20][9], double grades_array[20][3]);
void average(int studentnum,double grades_array[20][3]);
/************************Task 1&2*************************************/
fipoint=fopen("grades.txt","r");

if(fipoint==NULL)
{
printf("Cannot open file!\n");
}
else
{
while(fscanf(fipoint,"%s",&StudentNames[x])>0)
{
fscanf(fipoint,"%lf", &StudentGrades[x][0]);
fscanf(fipoint,"%lf", &StudentGrades[x][1]);
fscanf(fipoint,"%lf", &StudentGrades[x][2]);

printf("%s %lf %lf %lf\n", StudentNames[x], StudentGrades[x][0],
StudentGrades[x][1], StudentGrades[x][2]);

x++;
}

fclose(fipoint);

}

/********************Task 3**************************************/


minimum((char)StudentNames,(double)StudentGrades);

maximum((char)StudentNames,(double)StudentGrades);
/********************Task 5**************************************/

printf("Which students average would you like to see?(1-20)\n\n");
scanf("%d",&studentnum1);
average(studentnum1,(double)StudentGrades);

system("pause");

}
/*****************************Minimum Function*********************************/
void minimum(char names_array[20][9], double grades_array[20][3])
{
int row=0,colmn=0,minrow=0;

int count=0;
double mini=0;


while(row<20){
if (grades_array[row][colmn]<=grades_array[row][colmn+1]){
mini==grades_array[row][colmn];
colmn++;

}

else {
mini==grades_array[row][colmn+1];
colmn++;
}

if(colmn==1){
row++;
colmn=0;
}

}

printf("Student %d had the lowest grade of %lf\n\n",minrow+1,mini);

}
/*****************************Maximum Function*********************************/
void maximum(char names_array[20][9], double grades_array[20][3])
{
int row2=0,colmn2=0,maxrow=0;

int count2=0;
double max=0;


while(row2<20){
if (grades_array[row2][colmn2]>=grades_array[row2][colmn2+1]){
max==grades_array[row2][colmn2];
colmn2++;

}

else {
max==grades_array[row2][colmn2+1];
colmn2++;
}

if(colmn2==1){
row2++;
colmn2=0;
}

}

printf("Student %d had the lowest grade of %lf\n\n",maxrow+1,max);

}
/**************************Average Function***********************************/
void average(int studentnum,double grades_array[20][3])
{
float aver, high, middle, low;


while(studentnum<1 || studentnum>20){
printf("This student does not exist");
}

if(grades_array[studentnum][0]>=grades_array[studentnum][1] && grades_array[studentnum][0]>=grades_array[studentnum][2]){/*****If first column is greatest**/
high=grades_array[studentnum][0]*.40;
if(grades_array[studentnum][1]>=grades_array[studentnum][2]){
middle=grades_array[studentnum][1]*.35;
low=grades_array[studentnum][2]*.25;
}
else{
middle=grades_array[studentnum][2]*.35;
low=grades_array[studentnum][1]*.25;
}
}

else if(grades_array[studentnum][1]>grades_array[studentnum][0] && grades_array[studentnum][1]>grades_array[studentnum][2]){/*****If second column is greatest**/
high=grades_array[studentnum][1]*.40;
if(grades_array[studentnum][0]>grades_array[studentnum][2]){
middle=grades_array[studentnum][0]*.35;
low=grades_array[studentnum][2]*.25;
}
else{
middle=grades_array[studentnum][2]*.35;
low=grades_array[studentnum][0]*.25;
}
}

else if(grades_array[studentnum][2]>grades_array[studentnum][0] && grades_array[studentnum][2]>grades_array[studentnum][1]){/*****If third column is greatest**/
high=grades_array[studentnum][2]*.40;
if(grades_array[studentnum][0]>grades_array[studentnum][1]){
middle=grades_array[studentnum][0]*.35;
low=grades_array[studentnum][1]*.25;
}
else{
middle=grades_array[studentnum][0]*.35;
low=grades_array[studentnum][1]*.25;
}
}

aver=high+middle+low;
printf("Student %d had and an average of %f",studentnum,aver);
}

Student1 77 68 86
Student2 50 60 35
Student3 45 87 90
Student4 60 87 90
Student5 34 56 4
Student6 1 2 3
Student7 67 75 81
Student8 23 45 90
Student9 1 50 100
Student10 34 65 86
Student11 38 98 78
Student12 67 54 97
Student13 99 98 87
Student14 17 71 7
Student15 64 86 87
Student16 56 78 65
Student17 23 45 76
Student18 69 96 87
Student19 45 78 88
Student20 80 81 90
I got the errors out and got it running but with many warnings. What exactly is this program supposed to do? The way you were casting was illegal so I took them out.
does this help any?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main()
{

FILE* fipoint;
double StudentGrades[20][3];
char StudentNames[20][9];
int x = 0,studentnum1;

double* grades;
char* names;
//grades=StudentGrades;
//names=StudentNames;


void minimum(char names_array[20][9], double grades_array[20][3]);
void maximum(char names_array[20][9], double grades_array[20][3]);
void average(int studentnum,double grades_array[20][3]);
/************************Task 1&2*************************************/
fipoint=fopen("grades.txt","r");

if(fipoint==NULL)
{
printf("Cannot open file!\n");
}
else
{
while(fscanf(fipoint,"%s",&StudentNames[x])>0)
{
fscanf(fipoint,"%lf", &StudentGrades[x][0]);
fscanf(fipoint,"%lf", &StudentGrades[x][1]);
fscanf(fipoint,"%lf", &StudentGrades[x][2]);

printf("%s %lf %lf %lf\n", StudentNames[x], StudentGrades[x][0],
StudentGrades[x][1], StudentGrades[x][2]);

x++;
}

fclose(fipoint);

}

/********************Task 3**************************************/


minimum(StudentNames, StudentGrades);

maximum(StudentNames,StudentGrades);
/********************Task 5**************************************/

printf("Which students average would you like to see?(1-20)\n\n");
scanf("%d",&studentnum1);
average(studentnum1,StudentGrades);

system("pause");

}
/*****************************Minimum Function*********************************/
void minimum(char names_array[20][9], double grades_array[20][3])
{
int row=0,colmn=0,minrow=0;

int count=0;
double mini=0;


while(row<20){
if (grades_array[row][colmn]<=grades_array[row][colmn+1]){
mini==grades_array[row][colmn];
colmn++;

}

else {
mini==grades_array[row][colmn+1];
colmn++;
}

if(colmn==1){
row++;
colmn=0;
}

}

printf("Student %d had the lowest grade of %lf\n\n",minrow+1,mini);

}
/*****************************Maximum Function*********************************/
void maximum(char names_array[20][9], double grades_array[20][3])
{
int row2=0,colmn2=0,maxrow=0;

int count2=0;
double max=0;


while(row2<20){
if (grades_array[row2][colmn2]>=grades_array[row2][colmn2+1]){
max==grades_array[row2][colmn2];
colmn2++;

}

else {
max==grades_array[row2][colmn2+1];
colmn2++;
}

if(colmn2==1){
row2++;
colmn2=0;
}

}

printf("Student %d had the lowest grade of %lf\n\n",maxrow+1,max);

}
/**************************Average Function***********************************/
void average(int studentnum,double grades_array[20][3])
{
float aver, high, middle, low;


while(studentnum<1 || studentnum>20){
printf("This student does not exist");
}

if(grades_array[studentnum][0]>=grades_array[studentnum][1] && grades_array[studentnum][0]>=grades_array[studentnum][2]){/*****If first column is greatest**/
high=grades_array[studentnum][0]*.40;
if(grades_array[studentnum][1]>=grades_array[studentnum][2]){
middle=grades_array[studentnum][1]*.35;
low=grades_array[studentnum][2]*.25;
}
else{
middle=grades_array[studentnum][2]*.35;
low=grades_array[studentnum][1]*.25;
}
}

else if(grades_array[studentnum][1]>grades_array[studentnum][0] && grades_array[studentnum][1]>grades_array[studentnum][2]){/*****If second column is greatest**/
high=grades_array[studentnum][1]*.40;
if(grades_array[studentnum][0]>grades_array[studentnum][2]){
middle=grades_array[studentnum][0]*.35;
low=grades_array[studentnum][2]*.25;
}
else{
middle=grades_array[studentnum][2]*.35;
low=grades_array[studentnum][0]*.25;
}
}

else if(grades_array[studentnum][2]>grades_array[studentnum][0] && grades_array[studentnum][2]>grades_array[studentnum][1]){/*****If third column is greatest**/
high=grades_array[studentnum][2]*.40;
if(grades_array[studentnum][0]>grades_array[studentnum][1]){
middle=grades_array[studentnum][0]*.35;
low=grades_array[studentnum][1]*.25;
}
else{
middle=grades_array[studentnum][0]*.35;
low=grades_array[studentnum][1]*.25;
}
}

aver=high+middle+low;
printf("Student %d had and an average of %f",studentnum,aver);
}
/*
Student1 77 68 86
Student2 50 60 35
Student3 45 87 90
Student4 60 87 90
Student5 34 56 4
Student6 1 2 3
Student7 67 75 81
Student8 23 45 90
Student9 1 50 100
Student10 34 65 86
Student11 38 98 78
Student12 67 54 97
Student13 99 98 87
Student14 17 71 7
Student15 64 86 87
Student16 56 78 65
Student17 23 45 76
Student18 69 96 87
Student19 45 78 88
Student20 80 81 90
*/
Last edited on
Thanks this helps alot. What all did you change though? The program takes a .txt file, splits it into 2 arrays, finds the min and makes grades, then takes the average...not too complicated.
What do you mean the way I was casting?
Topic archived. No new replies allowed.