void search() { char *name; int num,m=0; int i; FILE *fp; if((fp=fopen("stu.txt","rb"))==NULL) { printf("文件打开失败\n"); } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1) { m++; } } fclose(fp); if(m==0) { printf("文件没有内容\n"); } printf("请输入学生姓名进行查询:"); scanf("%d",&name); int found=0; for(i=0;i<num;i++) { if(strcmp(stu[i].name,name)==0) { printf("\n"); printf("该学生信息已被查到;\n"); printf("学号\t姓名\t性别\t出生年月\t电话\t英语成绩\t数学成绩\t总成绩\n"); printf("%3d\t%s\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].broth,stu[i].phone,stu[i].Eng_score,stu[i].M_score,stu[i].total); found=1; } } if(!found) { printf("该学生信息不存在\n"); } }
时间: 2023-11-01 17:07:48 浏览: 36
这是一个用于查询学生信息的函数,它从文件"stu.txt"中读取学生信息,然后根据输入的学生姓名进行查询。其中,变量name表示输入的学生姓名,变量num表示学生总数,变量m表示已读取的学生数。函数首先打开文件"stu.txt",然后通过循环读取文件中的学生信息,将其存储在数组stu中。如果文件没有内容,函数会输出"文件没有内容"。之后,函数会提示输入要查询的学生姓名,然后根据输入的姓名在stu数组中进行查找。如果找到了对应的学生信息,则输出该信息;如果未找到,则输出"该学生信息不存在"。需要注意的是,该函数中有一个错误,即输入的是学生姓名,但是使用了%d格式化符读取输入,应将%d改为%s。
相关问题
给下面这段代码加上中文注释:#include <stdio.h> #include <stdlib.h> #include <string.h> void menu1(); void create_file(FILE *fp, char *fname); void write_file(FILE *fp, char *fname); void read_file(FILE *fp, char *fname); int main() { system("color F4"); FILE *fp = NULL; int count = 0; char num[100]; int flag1 = 0, flag2 = 0, flag3 = 0; char F_name[20]; while (1) { menu1(); printf("\t请选择你要进行的文件操作:"); scanf("%s", num); getchar(); while (strlen(num) > 1 || num[0] < 49 || num[0] > 52) { printf("\t输入错误!请重新输入:"); scanf("%s", num); getchar(); } switch (num[0]) { case '1': flag1 = 1; break; case '2': flag2 = 1; break; case '3': flag3 = 1; break; case '4': printf("\n\t"); exit(0); break; } if (flag1 == 1) { flag1 = 0; create_file(fp, F_name); } else if (flag2 == 1) { flag2 = 0; write_file(fp, F_name); } else if (flag3 == 1) { flag3 = 0; read_file(fp, F_name); } } return 0; } void menu1() { printf("\n\n"); printf(" *************************************** \n"); printf("\t \n"); printf(" 文本编辑器 \n"); printf("\t \n "); printf(" *************************************** \n"); printf("\t 1.建立文本 \n"); printf("\t 2.编辑文本 \n"); printf("\t 3.读取文本 \n"); printf("\t 4.退出程序 \n"); printf(" *************************************** \n"); } void write_file(FILE *fp, char *fname) { char ch; printf("\t请输入编辑的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "w")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t请输入内容(以#号键结束):\n\t"); ch = getchar(); while (ch != '#') { fputc(ch, fp); ch = getchar(); } printf("\n\n"); getchar(); fclose(fp); } void create_file(FILE *fp, char *fname) { printf("\t请输入新建的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "w+")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t%s文件已经创建好!\n\n", fname); fclose(fp); } void read_file(FILE *fp, char *fname) { char ch; printf("\t请输入读取的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "r")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t"); while ((ch = fgetc(fp)) != EOF) { putchar(ch); } printf("\t\n\n"); fclose(fp); }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 创建菜单函数
void menu1();
// 创建文件函数
void create_file(FILE *fp, char *fname);
// 写入文件函数
void write_file(FILE *fp, char *fname);
// 读取文件函数
void read_file(FILE *fp, char *fname);
int main() {
// 设置控制台颜色
system("color F4");
// 初始化文件指针和计数器等变量
FILE *fp = NULL;
int count = 0;
char num[100];
int flag1 = 0, flag2 = 0, flag3 = 0;
char F_name[20];
// 进入程序循环
while (1) {
// 显示菜单
menu1();
// 获取用户输入的选项
printf("\t请选择你要进行的文件操作:");
scanf("%s", num);
getchar();
// 判断用户输入是否合法
while (strlen(num) > 1 || num[0] < 49 || num[0] > 52) {
printf("\t输入错误!请重新输入:");
scanf("%s", num);
getchar();
}
// 根据用户输入的选项进行相应操作
switch (num[0]) {
case '1':
flag1 = 1;
break;
case '2':
flag2 = 1;
break;
case '3':
flag3 = 1;
break;
case '4':
printf("\n\t");
exit(0);
break;
}
// 根据不同选项调用不同的函数
if (flag1 == 1) {
flag1 = 0;
create_file(fp, F_name);
} else if (flag2 == 1) {
flag2 = 0;
write_file(fp, F_name);
} else if (flag3 == 1) {
flag3 = 0;
read_file(fp, F_name);
}
}
return 0;
}
// 菜单函数
void menu1() {
printf("\n\n");
printf(" *************************************** \n");
printf("\t \n");
printf(" 文本编辑器 \n");
printf("\t \n ");
printf(" *************************************** \n");
printf("\t 1.建立文本 \n");
printf("\t 2.编辑文本 \n");
printf("\t 3.读取文本 \n");
printf("\t 4.退出程序 \n");
printf(" *************************************** \n");
}
// 写入文件函数
void write_file(FILE *fp, char *fname) {
char ch;
// 获取用户输入的文件名
printf("\t请输入编辑的文件名:\n\t");
gets(fname);
// 打开文件并判断是否打开成功
if ((fp = fopen(fname, "w")) == NULL) {
printf("\t不能打开文件!\n");
exit(0);
}
// 获取用户输入的内容并逐个写入文件
printf("\t请输入内容(以#号键结束):\n\t");
ch = getchar();
while (ch != '#') {
fputc(ch, fp);
ch = getchar();
}
printf("\n\n");
getchar();
fclose(fp);
}
// 创建文件函数
void create_file(FILE *fp, char *fname) {
// 获取用户输入的新文件名
printf("\t请输入新建的文件名:\n\t");
gets(fname);
// 创建文件并判断是否成功
if ((fp = fopen(fname, "w+")) == NULL) {
printf("\t不能打开文件!\n");
exit(0);
}
printf("\t%s文件已经创建好!\n\n", fname);
fclose(fp);
}
// 读取文件函数
void read_file(FILE *fp, char *fname) {
char ch;
// 获取用户输入的文件名
printf("\t请输入读取的文件名:\n\t");
gets(fname);
// 打开文件并判断是否打开成功
if ((fp = fopen(fname, "r")) == NULL) {
printf("\t不能打开文件!\n");
exit(0);
}
// 逐个读取文件中的字符并输出
printf("\t");
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
printf("\t\n\n");
fclose(fp);
}
#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); } }设计思想
这段代码实现了从指定文件中读取学生信息,并将读取的结果输出到标准输出中。
在main函数中,定义了一个结构体类型stu,包含学生的id、姓名、年龄和成绩。接着定义了一个常量NUM,指定了需要读取的学生数量,并定义了一个结构体数组students,以及一个指向数组首元素的指针p。还定义了一个要读取的文件名和文件打开模式。
然后调用readFileForStu函数,从指定文件中读取学生信息,将结果存入结构体数组中。接着调用stdoutForStu函数,将学生信息输出到标准输出中。
在readFileForStu函数中,首先通过fopen函数打开指定文件,如果打开失败则返回。然后通过for循环从文件中逐个读取学生信息,将结果存入结构体数组中。
在stdoutForStu函数中,通过for循环将学生信息逐个输出到标准输出中,使用printf函数格式化输出。
总的来说,该代码的设计思想是将读取和输出操作封装成两个函数,提高了代码的可读性和复用性。同时,该代码涉及结构体、文件操作和格式化输出等知识点,可以帮助初学者熟悉这些知识点的使用。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)