#include <stdio.h> struct stu{ int id; char name[20]; int age; int score; }; int main(){ void readFileForStu(struct stu *p, int num, char filename[],char mode[]); void stdoutForStu(struct stu *p, int num); const int NUM = 2; struct stu students[NUM]; struct stu *p = students; char filename[] = "ex804.txt"; readFileForStu(p, NUM, filename, "r"); stdoutForStu(p, NUM); return 0; } void readFileForStu(struct stu *p, int num, char filename[],char mode[]){ FILE *fp = fopen(filename, mode); if(fp == NULL){ return ; } int i; for(i=0; i<num; i++){ fscanf(fp,"%d %s %d %d",&p[i].id,p[i].name,&p[i].age,&p[i].score); } fclose(fp); } void stdoutForStu(struct stu *p, int num){ int i; for(i=0; i<num; i++){ printf("%d %s %d %d\n",p[i].id,p[i].name,p[i].age,p[i].score); } }设计思想
时间: 2024-01-18 11:05:07 浏览: 30
这段代码实现了从指定文件中读取学生信息,并将读取的结果输出到标准输出中。
在main函数中,定义了一个结构体类型stu,包含学生的id、姓名、年龄和成绩。接着定义了一个常量NUM,指定了需要读取的学生数量,并定义了一个结构体数组students,以及一个指向数组首元素的指针p。还定义了一个要读取的文件名和文件打开模式。
然后调用readFileForStu函数,从指定文件中读取学生信息,将结果存入结构体数组中。接着调用stdoutForStu函数,将学生信息输出到标准输出中。
在readFileForStu函数中,首先通过fopen函数打开指定文件,如果打开失败则返回。然后通过for循环从文件中逐个读取学生信息,将结果存入结构体数组中。
在stdoutForStu函数中,通过for循环将学生信息逐个输出到标准输出中,使用printf函数格式化输出。
总的来说,该代码的设计思想是将读取和输出操作封装成两个函数,提高了代码的可读性和复用性。同时,该代码涉及结构体、文件操作和格式化输出等知识点,可以帮助初学者熟悉这些知识点的使用。
相关问题
#include<stdio.h> struct Student { int age; char name[100]; float score[5]; }; int main(void) { struct Student stu1; int i; float ave,sum; stu1.age=18 strcpy(stu1.name,"zhangsan"); for(i=0;i<5;i++) scanf("%f",&stu.score[i]); for(i=0;i<5;i++) { sum=sum+stu1.score; } printf("",stu1.score); } 续写一下最低分,最高分。
可以在输入分数的同时,记录最低分和最高分,然后输出即可。
代码如下:
#include<stdio.h>
#include<string.h>
struct Student {
int age;
char name[100];
float score[5];
};
int main(void)
{
struct Student stu1;
int i;
float ave,sum, min, max;
stu1.age=18;
strcpy(stu1.name,"zhangsan");
// 输入分数同时记录最低分和最高分
scanf("%f",&stu1.score[0]);
min = stu1.score[0];
max = stu1.score[0];
sum = stu1.score[0];
for(i=1;i<5;i++)
{
scanf("%f",&stu1.score[i]);
if(stu1.score[i] < min) {
min = stu1.score[i];
}
if(stu1.score[i] > max) {
max = stu1.score[i];
}
sum += stu1.score[i];
}
// 计算平均分
ave = sum / 5;
// 输出结果,包括最低分、最高分和平均分
printf("Name: %s\nAge: %d\n", stu1.name, stu1.age);
printf("Scores: ");
for(i=0;i<5;i++) {
printf("%.1f ", stu1.score[i]);
}
printf("\n");
printf("Minimum score: %.1f\n", min);
printf("Maximum score: %.1f\n", max);
printf("Average score: %.1f\n", ave);
return 0;
}
注意,此处代码有个小错误,输入分数时循环中的变量写成了stu,应该是stu1。已经进行了修改。
#include<stdio.h> struct student {long num; char name[20]; int age; int score[7]; }stu[3] ; int main() {printf("请输入三名学生的学号,姓名,年龄以及七科成绩:\n"); int i; for(i=0;i<3;i++) scanf("%l%s%d%d\n",&stu[i].num,stu[i].name,&stu[i].age,&stu[i].score); for(i=0;i<3;i++) printf("%l%s%d%d\n",stu[i].num,stu[i].name,stu[i].age,stu[i].score); return 0; } 哪里有错
这段代码中有几个问题:
1. 在 scanf() 函数中,应该使用 %d 格式符来读取整型数据,而不是 %l,应该使用 %s 格式符来读取字符串数据,而不是 %s。
2. 在 scanf() 函数中,应该使用 & 符号来获取变量的地址,而不是省略。
3. 在第二个 for 循环中,应该使用 %d 格式符来输出整型数据,而不是 %d。
下面是修改后的代码:
```c
#include <stdio.h>
struct student {
long num;
char name[20];
int age;
int score[7];
} stu[3];
int main() {
printf("请输入三名学生的学号,姓名,年龄以及七科成绩:\n");
int i;
for (i = 0; i < 3; i++) {
scanf("%ld%s%d%d%d%d%d%d%d", &stu[i].num, stu[i].name, &stu[i].age, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].score[3], &stu[i].score[4], &stu[i].score[5], &stu[i].score[6]);
}
for (i = 0; i < 3; i++) {
printf("%ld %s %d %d %d %d %d %d %d\n", stu[i].num, stu[i].name, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3], stu[i].score[4], stu[i].score[5], stu[i].score[6]);
}
return 0;
}
```