Помимо ваших проблем с символьными константами у вас есть ошибки в том, как вы справляетесь с fputc
.fputc
возвращает int
.Он может возвращать либо EOF
, который является отрицательной целочисленной константой, если для красного цвета не было оставшихся символов, либо произошла ошибка, либо он может вернуть значение символа, считанного как unsigned char
и преобразованного в int
.
Если вы преобразуете возвращаемое значение fputc
в char
перед сравнением его с EOF
, то допустимый символ может сравниться с равным EOF
, что приведет к преждевременному завершению цикла.
Кроме того, цикл while
не начинается до первого вызова fputc
, поэтому вы используете неинициализированное значение ch
в первой итерации.Это может привести к чему-либо.
Идиоматический способ формирования цикла будет выглядеть так:
int ch;
while ((ch = fgetc()) != EOF)
{
/* ... */
}
В стороне от цикла вы должны быть осторожны при сравнении возвращаемого значения из-затот факт, что ch
- это unsigned char
, преобразованный в int
.
На большинстве платформ проще всего было бы создать переменную char для целей сравнения, хотя вы можете поместить своего персонажаконстанты через ту же самую процедуру преобразования unsigned char
в int
.
Например
char c = ch;
if (c == '\n')
или
if (ch == (unsigned char)'\n')
Другие указали на проблемы с литералами вашего персонажа.