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