【发布时间】:2021-11-20 04:58:02
【问题描述】:
我正在尝试编写一个程序,该程序将从一个文件读取输入,对其进行编辑,然后打印到另一个文件。编辑将是:如果它读取 4A3B,它将打印 AAAABBB。如果它读取 2C1D,它将打印 CCD。新文件中不会有任何数字。到目前为止,我能想到的只是如何将第一个文件复制到第二个文件中。
我不确定如何进行所需的更改。有没有办法编写一个函数,可以在读取文件时区分数字和字母?
我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main(void) {
FILE *first, *second;
char letter;
int num;
first= fopen("first.txt", "r");
second= fopen("second.txt", "w");
if (first== NULL) {
printf("File doesn't exist.\n");
}
while ((a = fgetc(first)) != EOF) {
fprintf(second, "%c", a);
}
//fprintf(second, "
fclose(first);
fclose(second);
return(0);
}
【问题讨论】:
-
第一个文件中的数字是否只有个位数?然后一次读取两个字符,将第一个字符转换为数字,然后将第二个字符写入循环中的第二个文件(例如使用
fputc而不是fprintf)。 -
顺便说一句,假设
letter和a应该是同一个变量,请记住fgetc返回一个int。当您想将其值与int值EOF进行比较时,这一点相当重要。 -
如果数字可以是多位数字(例如 10B22A),我会使用
fscanf("%d%c", &num, &letter);来读取每个数字/字符对。请务必检查fscanf返回的值。由于请求了两次转换,因此返回值应为 2。如果不是,则文件中可能有错字,或者您已到达文件末尾。无论哪种方式,读取文件的循环都应该结束。 -
"File doesn't exist.\n"是不正确且具有误导性的错误消息。试试perror("first.txt");