2013-11-23 3 views
0

Я работаю на C и пытаюсь прочитать файл и сохранить символы, возвращаемые fgetc в массиве. Проблема в том, что fgetc неоднократно возвращает случайный символ. Помеченное место в комментарии. Например, «wwwwwwwwwwww ...» или «@@@@@@@@@@@@ ...». Любая помощь приветствуется. Вот функция:fgetc не работает C- возвращает тот же символ повторно

void removeCategories(FILE *category, int *prodPrinted){ 

    char more[16] = { '\0' }, hidden[17] = { '\0' }, temp = '\0', mdn[] = { "More Data Needed" }, hnl[] = { "Hidden non listed" }; 

    int newLineCount = 0, i, ch = '\0'; 

    do{ 
     /*shift char in each list -> one*/ 

     for (i = 16; i > 0; i--){ 
      if (i <= 16){ 
       hidden[i] = hidden[i - 1]; 
      } 
      if (i <= 15){ 
       more[i] = more[i - 1]; 
      } 
     } 

     more[0] = hidden[0] = ch = (fgetc(category)); 
     printf("%c", &ch);  /*problem is here, prints random char repeatedly*/ 

     if (strcmp(more, mdn) == 0 || strcmp(hidden, hnl) == 0){ 
      prodPrinted[newLineCount] = 0; 
       printf("%c", more[0]);        /*test print*/ 
     } 
     if (ch == '\n'){ 
      newLineCount++; 
     } 
    } while (ch != EOF); 
} 
+4

должен быть 'Е («% с», ч)' – amdixon

+0

Обратите внимание, что вы должны проверить, является ли 'ch' EOF, прежде чем пытаться его сохранить. Например, 'if (ch == EOF) break;' после строки, назначаемой 'ch'. –

ответ

1

Выпуск находится в вызове для печати персонажу

printf("%c", &ch); 

это на самом деле пытается напечатать адрес вашей ч в стеке (трактуемой как гольца).

Что вы хотите:

printf("%c", ch); 

, который будет печатать содержимое этого адреса стека правильно (как полукокса)

+0

oh wow, noobie ошибка. Спасибо за быстрый ответ. – TinMan

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