组织文件输出问题

Organizing file output problems

我正在开发一个程序来组织文件中的数字列表并以更易于阅读的格式输出这些数字。例如名为 Counting.txt 的文件包含数字:

11

1 1 2 3 4 4 4 4 5 5 7

我希望它输出:

1x2 2x1 3x1 4x4 5x2 7x1

输出公式为vXc,其中v是数字,c是出现的次数。但我目前的程序只输出为:

1x1 2x1 3x1 4x1 4x1 4x1 4x1 5x1 5x1 7x1

我认为我的 for 循环中存在一个小错误,不允许我更改 c 变量,或者指示实际数字出现次数的数字。有人可以帮忙吗?

我的代码:

#include <stdio.h>

int main () {
  FILE* file = fopen("counting.txt", "r");
  int total_num, count = 1, num, num2, i;

  if (file == NULL) {
    printf("Did not find counting.txt file.\n");
  }

  fscanf(file, "%d", &total_num);
  fscanf(file, "%d", &num);

  for (i = 1; i < total_num; i++) {
    fscanf(file, "%d", &num);

    if (num2 == num) {
      count = count + 1;
    } else {
      printf("%dX%d ", num, count);
      count = 1;
    }
  }
  return 0;
}

在循环中,您读入 num 而不是 num2。所以一般来说 num2 是未定义的。您还需要在每个循环的迭代结束时将 num2 的值分配给 num

此外,当您打印重复次数时,您应该参考旧值而不是当前值,因为您不知道当前数字后面是否会跟其他相等的数字。

因此您可以将循环更改为:

for (i=1; i< total_num; i++) {
    fscanf(file, "%d", &num2);
    if (num2 == num) {
        count = count + 1;
    }
    else {
        printf("%dX%d ", num, count);
        count = 1;
    }
    num = num2;
 }
 printf("%dX%d ", num, count);