【问题标题】:Reading input from a file, changing it, and printing to a new file [closed]从文件中读取输入,更改它并打印到新文件[关闭]
【发布时间】: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)。
  • 顺便说一句,假设lettera 应该是同一个变量,请记住fgetc 返回一个int。当您想将其值与intEOF 进行比较时,这一点相当重要。
  • 如果数字可以是多位数字(例如 10B22A),我会使用 fscanf("%d%c", &amp;num, &amp;letter); 来读取每个数字/字符对。请务必检查 fscanf 返回的值。由于请求了两次转换,因此返回值应为 2。如果不是,则文件中可能有错字,或者您已到达文件末尾。无论哪种方式,读取文件的循环都应该结束。
  • "File doesn't exist.\n" 是不正确且具有误导性的错误消息。试试perror("first.txt");

标签: c file


【解决方案1】:

我不确定如何进行所需的更改。

  • 将字符对读入ints。
    fgetc() 通常返回 257 个不同的值:[0-255] 和 EOF(有些是负数)。保存在int

...区分(字符)数字和字母...

  • 使用is....() 进行测试

示例代码

#include <ctype.h>
...

  int n, a;
  while (isdigit(n = fgetc(first)) && isalpha(a = fgetc(first))) {
    printf("Pair %c:%c\n", n, a);
    // Change digit character into value
    int repeat_count = n - '0';

    for (int i = 0; i < repeat_count; i++) {
      fprintf(second, "%c", a);
    }
  }

或者,使用fscanf(),因为上面不会将"123A"读作123 'A'

"%d" 将文本读取为数字。
"%1[A-Za-z]" 将一系列字母(最多 1 个)读取为 字符串

  int n;
  char a[2];
  while (fscanf(first, "%d%1[A-Za-z]", &n, a) == 2) {
    printf("Pair %d:%c\n", n, a[0]);

    for (int i = 0; i < n; i++) {
      fprintf(second, "%c", a[0]);
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多