C语言中输入文件名并打开文件
在C语言中,你可以通过以下步骤实现输入文件名并打开文件:

(图片来源网络,侵删)
基本方法
#include <stdio.h>
#include <stdlib.h>
int main() {
char filename[100]; // 存储文件名的数组
FILE *file; // 文件指针
// 提示用户输入文件名
printf("请输入要打开的文件名: ");
scanf("%99s", filename); // 限制输入长度防止缓冲区溢出
// 打开文件
file = fopen(filename, "r"); // "r"表示读取模式,"w"表示写入模式,"a"表示追加模式
if (file == NULL) {
printf("无法打开文件 %s\n", filename);
return 1; // 返回错误码
}
// 文件操作...
// 关闭文件
fclose(file);
return 0;
}
更健壮的实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char filename[256];
FILE *file;
printf("请输入要打开的文件名: ");
// 使用fgets代替scanf,可以处理包含空格的文件名
if (fgets(filename, sizeof(filename), stdin) == NULL) {
printf("读取输入失败\n");
return 1;
}
// 去除可能的换行符
filename[strcspn(filename, "\n")] = '\0';
file = fopen(filename, "r");
if (file == NULL) {
perror("打开文件失败"); // perror会打印系统错误信息
return 1;
}
printf("成功打开文件 %s\n", filename);
// 示例:读取文件内容并打印
char ch;
printf("文件内容:\n");
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
fclose(file);
return 0;
}
常见文件打开模式
| 模式 | 描述 |
|---|---|
| "r" | 读取(文件必须存在) |
| "w" | 写入(文件不存在则创建,存在则清空) |
| "a" | 追加(文件不存在则创建,存在则在末尾添加) |
| "r+" | 读取/写入(文件必须存在) |
| "w+" | 读取/写入(文件不存在则创建,存在则清空) |
| "a+" | 读取/追加(文件不存在则创建,存在则在末尾添加) |
错误处理建议
- 始终检查
fopen的返回值是否为NULL - 使用
perror函数打印有意义的错误信息 - 考虑使用
strerror(errno)获取详细的错误描述 - 确保在程序结束前关闭所有打开的文件
完整示例(带错误处理)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main() {
char filename[256];
FILE *file;
printf("请输入要打开的文件名: ");
if (fgets(filename, sizeof(filename), stdin) == NULL) {
fprintf(stderr, "读取输入失败: %s\n", strerror(errno));
return EXIT_FAILURE;
}
filename[strcspn(filename, "\n")] = '\0';
file = fopen(filename, "r");
if (file == NULL) {
fprintf(stderr, "打开文件失败: %s\n", strerror(errno));
return EXIT_FAILURE;
}
printf("成功打开文件 %s\n", filename);
// 读取文件内容
printf("\n文件内容:\n");
char buffer[1024];
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
if (ferror(file)) {
fprintf(stderr, "读取文件时发生错误: %s\n", strerror(errno));
fclose(file);
return EXIT_FAILURE;
}
fclose(file);
return EXIT_SUCCESS;
}
这个实现提供了更全面的错误处理和更安全的输入方式。

(图片来源网络,侵删)
