修改此程序并添加中文注释,要求实现获取插入内容与插入位置后,将插入位置以后的全部内容暂存,将插入内容在插入位置添加,然后计算插入内容长度,将暂存的内容向后偏移插入内容长度,保存于插入内容结尾后一位:// 插入函数,用于在指定位置插入内容到指定文件 void insert_file(FILE *fp, char *fname) { char ch; long int pos; int len = 0; // 获取用户输入的文件名 printf("\t请输入插入的文件名:\n\t"); // 从标准输入中获取文件名 fgets(fname, MAX_LEN, stdin); // 查找'\n'字符并替换为'\0' char *pos1 = NULL; if ((pos1 = strchr(fname, '\n')) != NULL) *pos1 = '\0'; // 添加后缀名".txt",如果没有输入 if (!strstr(fname, ".txt")) strcat(fname, ".txt"); // 打开文件并判断是否打开成功 if ((fp = fopen(fname, "r+")) == NULL) { // 打开文件方式改为"r+",即可读可写 printf("\t不能打开文件!\n"); exit(0); } // 获取文件长度 fseek(fp, 0, SEEK_END); len = ftell(fp); // 显示文件已有内容 printf("\t文件已有内容:\n"); rewind(fp); while ((ch = fgetc(fp)) != EOF) { putchar(ch); } // 获取用户输入的插入位置 printf("\n\t请输入插入的位置(从0开始):\n\t"); scanf("%ld", &pos); getchar(); // 读取换行符 // 获取用户输入的插入内容并计算长度 printf("\t请输入要插入的内容:\n\t"); char input[MAX_LEN]; fgets(input, MAX_LEN, stdin); int input_len = strlen(input) - 1; // 减去换行符的长度 // 如果输入内容长度超过了文件长度,则提示插入位置错误 if (pos + input_len > len) { printf("\t插入位置错误!\n"); exit(0); } // 依次将后面的字符往后移动input_len个字符 for (int i = len; i >= pos + 1; i--) { fseek(fp, i - 1, SEEK_SET); ch = fgetc(fp); fseek(fp, i + input_len - 1, SEEK_SET); fputc(ch, fp); } // 将输入内容插入到文件中 fseek(fp, pos, SEEK_SET); fputs(input, fp); printf("\t编辑后内容:\n"); rewind(fp); while ((ch = fgetc(fp)) != EOF) { putchar(ch); } // 关闭文件 fclose(fp); printf("\n\t插入成功!\n"); }
时间: 2024-03-26 22:36:47 浏览: 71
// 插入函数,用于在指定位置插入内容到指定文件
void insert_file(FILE *fp, char *fname) {
char ch;
long int pos;
int len = 0;
// 获取用户输入的文件名
printf("\t请输入插入的文件名:\n\t");
// 从标准输入中获取文件名
fgets(fname, MAX_LEN, stdin);
// 查找'\n'字符并替换为'\0'
char *pos1 = NULL;
if ((pos1 = strchr(fname, '\n')) != NULL) *pos1 = '\0';
// 添加后缀名".txt",如果没有输入
if (!strstr(fname, ".txt")) strcat(fname, ".txt");
// 打开文件并判断是否打开成功
if ((fp = fopen(fname, "r+")) == NULL) { // 打开文件方式改为"r+",即可读可写
printf("\t不能打开文件!\n");
exit(0);
}
// 获取文件长度
fseek(fp, 0, SEEK_END);
len = ftell(fp);
// 显示文件已有内容
printf("\t文件已有内容:\n");
rewind(fp);
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
// 获取用户输入的插入位置
printf("\n\t请输入插入的位置(从0开始):\n\t");
scanf("%ld", &pos);
getchar(); // 读取换行符
// 获取用户输入的插入内容并计算长度
printf("\t请输入要插入的内容:\n\t");
char input[MAX_LEN];
fgets(input, MAX_LEN, stdin);
int input_len = strlen(input) - 1; // 减去换行符的长度
// 如果输入内容长度超过了文件长度,则提示插入位置错误
if (pos + input_len > len) {
printf("\t插入位置错误!\n");
exit(0);
}
// 依次将后面的字符往后移动input_len个字符
for (int i = len; i >= pos + 1; i--) {
fseek(fp, i - 1, SEEK_SET);
ch = fgetc(fp);
fseek(fp, i + input_len - 1, SEEK_SET);
fputc(ch, fp);
}
// 将输入内容插入到文件中
fseek(fp, pos, SEEK_SET);
fputs(input, fp);
printf("\t编辑后内容:\n");
rewind(fp);
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
// 关闭文件
fclose(fp);
printf("\n\t插入成功!\n");
}
阅读全文