Я пишу программу для сжатия файла, состоящего из шестнадцатеричных значений, в код длины прогона. Например, для файла:
46 6f 6f 20 62 61 72 21 21 21 20 20 20 20 20
мой код должен создать следующий файл:
01 46 02 6f 01 20 01 62 01 61 01 72 03 21 05 20
Я не знаю, почему программа, которую я написал, зависает. Любая помощь будет оценена по достоинству.
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
int main(void){
int a, b, c, count=1, flag=TRUE;
FILE *file;
FILE *out;
file = fopen("input.txt", "r");
if(file){
out = fopen("input.txt.out", "a");
fscanf(file, "%x", &a);
while(fscanf(file, "%x", &c)){
while(flag==TRUE){
if(c==a){
count= count+1;
}else{
flag = FALSE;
}
b=a;
a=c;
}
fprintf(out, "%d %02x ", count, b);
count = 1;
flag = TRUE;
}
}else{
printf("ERROR: file not found.");
}
}
РЕДАКТИРОВАТЬ: я обновил код, удалив аргумент! Feof (file) и заменив его фактической функцией ввода-вывода. Спасибо за понимание. Однако моя программа по-прежнему не работает.
feof(file)
, чтобы определить, произошел ли сбой из-за конца файла или из-за ошибки. Щелкните вопрос, связанный с пользователем 3386109 выше, чтобы узнать об этом подробнее. - person   schedule 04.12.2016while (flag==TRUE)
и используетеfscanf()
внутри этого цикла без проверки возвращаемого значенияfscanf()
, поэтому, если вы встретите конец файла, он будет зацикливаться наfscanf()
и выполнитьcount = count + 1
без установкиflag
наFALSE
. - person   schedule 04.12.2016