void read() { FILE *fp2; char ch; if((fp2=fopen("学生宿舍管理系统.txt","r"))==NULL) { printf("文件无法打开!\n"); exit(0); } printf("正在读入文件...\n"); Sleep(1000); ch=fgetc(fp2); while(!feof(fp2)) { putchar(ch); ch=fgetc(fp2); } printf("\n"); fclose(fp2); printf("文件读入成功!\n"); }和void read();类型冲突吗
时间: 2024-04-26 21:21:06 浏览: 116
void read()和void read();类型不一致,前者是一个函数的定义,后者是一个函数的声明。在C语言中,函数的声明和定义都需要指定函数的返回类型和参数列表,而后者只有函数名和分号,缺少了返回类型和参数列表,因此编译器会报错。如果要声明一个没有返回值和参数的函数,应该这样写:void read(void);。这样就可以避免类型冲突的问题。
相关问题
给下面这段代码加上中文注释:#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> #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; int count=0; char num[100]; int flag1,flag2,flag3; 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); }
在代码中,flag1、flag2、flag3 没有初始化,且没有清零操作,可能会导致程序出现意外的行为。建议在 while 循环开始前将这三个变量初始化为 0。
代码中的变量 F_name 在 main 函数中没有初始化,建议在使用该变量前先进行初始化。
还有一些细节问题,比如在写文件和读文件时,应该加上文件名的长度判断,防止用户输入的文件名过长导致程序出错。
以下是修改后的代码:
阅读全文