2015-02-27 5 views
0

Я работаю над программой для организации списка чисел из файла и вывода этих чисел в удобном для чтения формате. Такие, как файл называется 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 

Я считаю, что есть небольшая ошибка по моему для цикла, которая не позволяет мне изменить мою 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

В цикле вы прочтете в 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); 
+0

Хм, я думаю, что я еще немного потерял. :(Что бы это выглядело в реальном коде? – staringblind

+0

Это помогло его почти там! Но с переработанным контуром он выводит: 2x2 3x1 4x1 5x4 7x2 7x1 Где нужный вывод: 1x2 2x1 3x1 4x4 5x2 7x1 – staringblind

+0

Что теперь? – JuniorCompressor

Смежные вопросы