如何修改TreePrint()函数,使其实现印代码文件功能。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。
时间: 2024-12-06 12:33:51 浏览: 10
为了实现`TreePrint()`函数的功能变更,使其能实现“打印代码文件”的功能,需要对现有函数进行改造或者新增一个专门用于打印代码文件的新函数。以下是具体步骤:
### 步骤 1: 新增函数 `PrintCodeFile()`
1. **定义新函数**:
- 名称:`PrintCodeFile()`
- 功能:从文件`CodeFile.txt`中读取编码内容,并以紧凑格式显示在终端上,每行50个代码。同时将这些编码写入文件`CodePrint.txt`中。
2. **实现新函数**:
```c
void PrintCodeFile() {
FILE *inFile = fopen("E:\\CodeFile.txt", "r");
FILE *outFile = fopen("E:\\CodePrint.txt", "w");
if (inFile == NULL || outFile == NULL) {
printf("Error opening file!\n");
return;
}
char buffer[1000];
fgets(buffer, sizeof(buffer), inFile);
int len = strlen(buffer);
int lineCount = 0;
for (int i = 0; i < len; i++) {
if (buffer[i] != '\n' && buffer[i] != ' ') {
putchar(buffer[i]);
fputc(buffer[i], outFile);
lineCount++;
if (lineCount % 50 == 0) {
printf("\n");
fputc('\n', outFile);
}
}
}
if (lineCount % 50 != 0) {
printf("\n");
fputc('\n', outFile);
}
fclose(inFile);
fclose(outFile);
printf("Code has been printed to terminal and saved to E:\\CodePrint.txt\n");
}
```
### 步骤 2: 修改主菜单
1. **更新主菜单选项**:
- 在主菜单中添加一个新的选项 `C: 打印代码文件 (Print Code File)`。
2. **更新 `main()` 函数**:
```c
int main() {
char key;
system("color F C ");
printf("╔━━━━━━━━━━━━━━━━━━━━━╗\n");
printf("┃ 赫夫曼编/译码器 ┃\n");
printf("┃ ┃\n");
printf("┃ 08信息 <2> 赵思宇 ┃\n");
printf("╚━━━━━━━━━━━━━━━━━━━━━╝\n");
do {
printf("\n\n\n");
printf("╔━━━━━━━━━━━━━━━━━━━━━╗\n");
printf("┃ 操作菜单 ┃\n");
printf("┃ ┃\n");
printf("┃ I: 初始化 (Initialization ) ┃\n");
printf("┃ E: 编 码 (Encoding ) ┃\n");
printf("┃ D: 译 码 (Decoding ) ┃\n");
printf("┃ P: 打印表 ( PrintHufmFigue ) ┃\n");
printf("┃ T: 打印图 ( TreePrint ) ┃\n");
printf("┃ C: 打印代码文件 (Print Code File) ┃\n");
printf("┃ Q: 退 出 (Initialization ) ┃\n");
printf("┃ ┃\n");
printf("╚━━━━━━━━━━━━━━━━━━━━━╝\n");
printf("\n\n");
printf("Please Enter a key of the operation:");
scanf("%c", &key);
getchar();
switch (key) {
case 'i':
case 'I':
Initialization();
break;
case 'e':
case 'E':
Encoding();
break;
case 'd':
case 'D':
Decoding();
break;
case 'p':
case 'P':
PrintHufmFigue();
break;
case 't':
case 'T':
TreePrint();
break;
case 'c':
case 'C':
PrintCodeFile();
break;
case 'q':
case 'Q':
break;
default:
printf("Invalid option! Please try again.\n");
}
} while (key != 'q' && key != 'Q');
return 1;
}
```
### 总结
通过上述步骤,我们新增了一个 `PrintCodeFile()` 函数,用于从 `CodeFile.txt` 中读取编码内容,并以紧凑格式显示在终端上,每行50个代码。同时,这些编码也会被写入 `CodePrint.txt` 文件中。此外,我们在主菜单中添加了相应的选项,使得用户可以通过选择 `C` 来调用这个新功能。
阅读全文