c
должно быть объявлено int
, а не char
.EOF
может быть недопустимым char
значением, поэтому неравенство может преуспеть навсегда.
Не следует дважды вызывать getc()
.Вы никогда не проверяете результат первого вызова, чтобы увидеть, является ли это новой строкой.
Вам необходимо установить i
обратно на 0
после прочтения новой строки, в противном случае вы будете продолжать добавлять длину следующей строкина предыдущую строку.
Вы должны печатать длину только при чтении новой строки, а не каждый раз через цикл.И если последняя строка не заканчивается новой строкой, вы должны вывести ее длину после цикла;вы можете сказать, что это произошло, если i
не равно 0
, когда это будет сделано.
Поскольку длины должны быть записаны в другой файл, вы должны использовать fprintf()
.
while ((c=getc(fr)) != EOF) {
if (c == '\n') {
printf("%d\n", i);
i = 0;
} else {
i++;
}
}
if (i != 0) {
fprintf(fw, "%d\n", i);
}