void read_file(FILE *fp, char *fname) { char ch; // 获取用户输入的文件名 printf("\t请输入读取的文件名:\n\t"); // 读取字符串 fgets(fname, MAX_LEN, stdin); fgets(fname, MAX_LEN, stdin); char *pos; // 查找'\n'字符 if ((pos = strchr(fname, '\n')) != NULL) // 将'\n'替换为'\0' *pos = '\0'; // 打开文件并判断是否打开成功 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); }
时间: 2024-03-14 22:49:17 浏览: 96
在 read_file 函数中,可以将 fgets(fname, MAX_LEN, stdin); 这行重复的代码删除掉。
此外,建议对文件指针 fp 进行合法性判断,如果 fp 为 NULL,则提示用户先选择文件进行读取。
修改后的代码如下:
void read_file(FILE *fp, char *fname) {
char ch;
// 获取用户输入的文件名
printf("\t请输入读取的文件名:\n\t");
fgets(fname, MAX_LEN, stdin);
char *pos;
// 查找'\n'字符
if ((pos = strchr(fname, '\n')) != NULL)
// 将'\n'替换为'\0'
*pos = '\0';
// 判断文件指针是否合法
if (fp == NULL) {
printf("\t请先选择文件!\n");
return;
}
// 打开文件并判断是否打开成功
if ((fp = fopen(fname, "r")) == NULL) {
printf("\t不能打开文件!\n");
return;
}
// 逐个读取文件中的字符并输出
printf("\t");
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
printf("\t\n\n");
fclose(fp);
}
阅读全文