组织文件输出问题

时间:2015-02-27 19:27:08

标签: c loops for-loop io count

我正在开发一个程序,用于组织文件中的数字列表,并以更易于阅读的格式输出这些数字。例如名为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;
}

1 个答案:

答案 0 :(得分:1)

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

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

所以你可以把你的循环改为:

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);