Ваш код печатает номера строк в конце строки, прямо перед печатью '\n'
, из-за того, как вы написали цикл. В противном случае ваш код должен работать.
Если вы хотите, чтобы ваш код печатал номера строк в начале, вы можете сделать что-то вроде (не проверено):
int line_num_printed = 0; /* indicating if we printed a line number */
int line = 1;
while ((c = fgetc(fp)) != EOF) {
if (!line_num_printed) {
printf("LINE %d: ", line);
line_num_printed = 1;
}
putchar(c);
if (c == '\n'){
line++;
line_num_printed = 0;
}
}
Если есть что-то, что «не работает», вы должны опубликовать полный код и сообщить нам, что не работает.
Редактировать : Правильный способ проверки символа для новой строки - проверка на '\n'
. Если символ взят из файла, вам также следует убедиться, что вы открываете файл в текстовом режиме, то есть без b
во втором аргументе fopen()
.
Кроме того, вы хотите, чтобы c
был типа int
, а не char
. Это связано с тем, что в C EOF
является небольшим отрицательным числом, а если char
является беззнаковым, сравнивая его с отрицательным числом, преобразуем значение EOF
в положительное значение (скорее всего, равное EOF + UCHAR_MAX + 1
). Поэтому вы должны , а не изменить c
на char
тип. Если вы это сделаете, сравнение c != EOF
может быть ложным, даже если fgetc()
вернет EOF
.