При выводе из файла добавляется лишний символ - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть содержимое файла:
12345
Once I caught a fish alive
45678910
Then I let it go again
111213314
Код выводит это содержимое в таком виде:
12345
Once I caught a fish alive
45678910
Then I let it go again
111213314
я
Откуда берется эта проклятая буква "я"? Она создает дополнительную строку, дополнительный символ, который просто не дает мне дальше работать с программой, помогите, пожалуйста
#define N 5
#define M 45
int main()
{
    setlocale(LC_ALL,"Russian");
    char ch[N][M];
    int i = 0, j = 0, d = 0, max = 0, k, m, c, k2, m2;
    FILE *file;
    file = fopen("c:\\1text.txt","r");
    while (!feof(file))                 
    {  
      ch[i][j] = getc(file);
      putchar(ch[i][j]);
      if (ch[i][j] != '\n')
            j++;
      else
      {
          i++;
          j = 0;
      }
    }
    fclose(file);
    printf ("\n");
}

Решение задачи: «При выводе из файла добавляется лишний символ»

textual
Листинг программы
while (1)                 
{  
    if((ch[i][j] = getc(file)) == EOF)
        break;
    putchar(ch[i][j]);
    if (ch[i][j] != '\n')
        j++;
    else
    {
        i++;
        j = 0;
    }
}

Объяснение кода листинга программы

В данном коде выполняется чтение из файла посимвольно и его вывод на экран. При этом, если текущий символ не является символом новой строки, то он выводится на экран, а значение переменной j увеличивается на единицу. Если текущий символ является символом новой строки, то значение переменной i увеличивается на единицу, а значение переменной j сбрасывается на ноль. Данный процесс повторяется до тех пор, пока из файла не будет достигнут конец.

  1. Объявлены две массивы символов ch[i][j].
  2. В условии цикла while (1) выполняется проверка на условие break.
  3. В каждой итерации цикла происходит чтение символа из файла с помощью функции getc(file) и его сохранение в массиве ch[i][j].
  4. Выводится символ из массива ch[i][j] с помощью функции putchar().
  5. Если символ не является символом новой строки, то значение переменной j увеличивается на единицу.
  6. Если символ является символом новой строки, то значение переменной i увеличивается на единицу, а значение переменной j сбрасывается на ноль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы