#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 300 // 最大字符数
int count_chars(char* line) { // 统计一行的字符数
int count = 0;
while (*line != '\0' && *line != '\n') { // 遍历整行字符
count++;
line++;
}
return count;
}
int main() {
FILE* fp; // 文件指针
// 打开文件进行写入,如果失败则输出错误信息并退出程序
fp = fopen("D:\\高级语言程序设计\\实验二\\experiment1\\experiment1\\text01.txt", "w");
if (fp == NULL) {
printf("Error: open file failed.\n");
exit(1);
}
int n; // 行数
char line[MAX_LINE_LENGTH + 2]; // 读入字符的行
int char_count; // 一行字符数
while (1) {
printf("请输入行数:");
scanf("%d", &n);
getchar(); // 消耗掉scanf缓存区中的换行符
if (n == 0) break;
for (int i = 0; i < n; i++) {
printf("请输入第%d行:", i + 1);
fgets(line, MAX_LINE_LENGTH + 2, stdin); // 读入一行字符
char_count = count_chars(line); // 统计该行字符数
fprintf(fp, "%d\n%s", char_count, line); // 将字符数和字符写入文件
}
}
fclose(fp); // 关闭文件
// 打开文件进行读取,如果失败则输出错误信息并退出程序
fp = fopen("D:\\高级语言程序设计\\实验二\\experiment1\\experiment1\\text01.txt", "r");
if (fp == NULL) {
printf("Error: open file failed.\n");
exit(1);
}
char_count = 0; // 一行字符数
while (fgets(line, MAX_LINE_LENGTH + 2, fp) != NULL) {
int len = strlen(line);
if (line[len - 1] == '\n') { // 去掉fgets读入的换行符
line[len - 1] = '\0';
}
if (char_count == 0) { // 读取一行字符的长度
sscanf(line, "%d", &char_count);
printf("%s", line + 2); // 将字符输出到屏幕上,注意+2
}
else {
printf("%s", line); // 将字符输出到屏幕上
}
if (count_chars(line) == char_count) { // 当读入的字符数等于字符行中字符的个数时,应该换行
putchar('\n');
char_count = 0; // 重置字符行长度
}
}
fclose(fp); // 关闭文件
return 0;
}