При выводе из файла добавляется лишний символ - 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 сбрасывается на ноль.
Данный процесс повторяется до тех пор, пока из файла не будет достигнут конец.
- Объявлены две массивы символов
ch[i][j]. - В условии цикла
while (1)выполняется проверка на условиеbreak. - В каждой итерации цикла происходит чтение символа из файла с помощью функции
getc(file)и его сохранение в массивеch[i][j]. - Выводится символ из массива
ch[i][j]с помощью функцииputchar(). - Если символ не является символом новой строки, то значение переменной
jувеличивается на единицу. - Если символ является символом новой строки, то значение переменной
iувеличивается на единицу, а значение переменнойjсбрасывается на ноль.