我刚刚完成了今天到期的 2 个 C 程序,但是当我的教授检查我的工作时,他告诉我在其中加入指针。我们还没有学过指针,我真的很难理解他的意思。我尝试添加通过在线教程学到的东西,但它只会导致多个错误,而且我无法使其工作。我目前正在努力,但我的截止日期现在确实是我的问题。这个网站是我最后的手段,我希望有人能帮助我。我真的只是不想让这 2 个项目获得 F 级。
我的第一个程序是学生记录。我想要将学生的姓名、分数 1、2、3 以及他们的最终成绩存储在文件中,但我不知道如何存储。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define max 3
void getscore(char *name, int *grade1, int *grade2, int *grade3);
void display();
float rate(float ave);
float average(int a, int b, int c);
float rating[max];
float ave[max];
char n[max][50];
int q1[max], q2[max], q3[max];
int main()
{
int i;
system("cls");
for(i = 0; i<max; i++){
system("cls");
printf("\t\tInput Student Record");
printf("\nStudent# %i", i+1);
getscore(n[i], &q1[i], &q2[i], &q3[i]);
ave[i] = average(q1[i], q2[i], q3[i]);
rating[i] = rate(ave[i]);
}
display();
getch(); //system("pause");
}
void getscore(char *name, int *grade1, int *grade2, int *grade3)
{
printf("\nStudent Name: ");
scanf("%s", name);
printf("\nQuiz Score#1: ");
scanf("%i", grade1);
printf("\nQuiz Score#2: ");
scanf("%i", grade2);
printf("\nQuiz Score#3: ");
scanf("%i", grade3);
}
float rate(float ave)
{
/*5.00 - 74 below
3.00 - 75 - 76
2.75 - 77 - 79
2.50 - 80 - 83
2.25 - 84 - 87
2.00 - 88 - 90
1.75 - 91 - 93
1.50 - 94 - 96
1.25 - 97 - 98
1.00 - 99 - 100
*/
if(ave >= 75 && ave <= 76)
return 3.00;
else if(ave >= 77 && ave <=79)
return 2.75;
else if(ave >= 80 && ave <= 83)
return 2.5;
else if(ave >=84 && ave <= 87)
return 2.25;
else if(ave >= 88 && ave <= 90)
return 2.00;
else if(ave > 91 && ave <= 93)
return 1.75;
else if(ave > 94 && ave <= 96)
return 1.50;
else if(ave > 97 && ave <= 98)
return 1.25;
else if(ave > 99 && ave <= 100)
return 1.00;
else
return 5.00;
}
float average(int a, int b, int c)
{
return (a+b+c) / 3;
}
void display()
{
int i;
printf("\nStudent Grade Record\n");
printf("\n\nNo. Name \t Quiz_1 \t Quiz_2 \t Quiz_3 \t Average \t Rating");
for(i=0; i < max; i++)
{
printf("\n%i.) %s \t\t%i \t\t%i \t\t%i \t\t%.2f \t\t%.2f", i+1, n[i], q1[i],
q2[i], q3[i], ave[i], rating[i]);
}
}
我尝试添加一些我从 YouTube 在线教程中学到的东西,但这只导致了一行又一行的错误。
尚不清楚您是否希望像现在一样将
display()
输出到标准输出和文件、仅显示到文件,还是使用不同的显示和文件格式。下面演示了通过传递 FILE *
来显示并使用 fprintf()
代替打印来写入文件。如果您想要不同的格式,请为文件输出创建替代的 display()
函数。
#include <stdio.h>
#include <stdlib.h>
#define max 3
#define NAME_LEN 49
#define str(s) str2(s)
#define str2(s) #s
void getscore(char *name, int *grade1, int *grade2, int *grade3);
void display();
float rate(float ave);
float average(int a, int b, int c);
float average(int a, int b, int c) {
return (a+b+c) / 3;
}
void display(FILE *f, char n[max][NAME_LEN+1], int q1[max], int q2[max], int q3[max], float ave[max], float rating[max]) {
fprintf(f, "\nStudent Grade Record\n");
fprintf(f, "\n\nNo. Name \t Quiz_1 \t Quiz_2 \t Quiz_3 \t Average \t Rating");
for(int i=0; i < max; i++) {
fprintf(f, "\n%i.) %s \t\t%i \t\t%i \t\t%i \t\t%.2f \t\t%.2f", i+1, n[i], q1[i],
q2[i], q3[i], ave[i], rating[i]);
}
}
void getscore(char *name, int *grade1, int *grade2, int *grade3) {
printf("\nStudent Name: ");
scanf("%" str(NAME_LEN) "s", name);
printf("\nQuiz Score#1: ");
scanf("%i", grade1);
printf("\nQuiz Score#2: ");
scanf("%i", grade2);
printf("\nQuiz Score#3: ");
scanf("%i", grade3);
}
float rate(float ave) {
/*5.00 - 74 below
3.00 - 75 - 76
2.75 - 77 - 79
2.50 - 80 - 83
2.25 - 84 - 87
2.00 - 88 - 90
1.75 - 91 - 93
1.50 - 94 - 96
1.25 - 97 - 98
1.00 - 99 - 100
*/
if(ave >= 75 && ave <= 76)
return 3.00;
else if(ave >= 77 && ave <=79)
return 2.75;
else if(ave >= 80 && ave <= 83)
return 2.5;
else if(ave >=84 && ave <= 87)
return 2.25;
else if(ave >= 88 && ave <= 90)
return 2.00;
else if(ave > 91 && ave <= 93)
return 1.75;
else if(ave > 94 && ave <= 96)
return 1.50;
else if(ave > 97 && ave <= 98)
return 1.25;
else if(ave > 99 && ave <= 100)
return 1.00;
else
return 5.00;
}
int main() {
FILE *file = fopen("output.txt", "a");
if(!file) {
fprintf(stderr, "could not open file\n");
return 1;
}
float rating[max];
float ave[max];
char n[max][NAME_LEN+1];
int q1[max], q2[max], q3[max];
for(int i = 0; i<max; i++) {
printf("\t\tInput Student Record");
printf("\nStudent# %i", i+1);
getscore(n[i], &q1[i], &q2[i], &q3[i]);
ave[i] = average(q1[i], q2[i], q3[i]);
rating[i] = rate(ave[i]);
}
FILE *handles[] = {stdout, file};
for(size_t i = 0; i < sizeof handles / sizeof *handles; i++)
display(handles[i], n, q1, q2, q3, ave, rating);
fclose(file);
}