Вы забыли проверить счетчик результатов fscanf .В частности, ваша программа совершенно не права, когда обработанный файл пустой.
while(c!=EOF)
Это может никогда не произойти (после любого fscanf(in,"%c",&c)
...).EOF
является , а не допустимым символом (поэтому по определению находится за пределами всех возможных значений char
).Например, в вашей системе char
может быть 8-разрядным без знака, а EOF
может быть равно -1 (EOF
задокументировано в §7.21.1 стандарта C11 - быть отрицательным int
, а не char
).Таким образом, тип EOF
не является char
.И на моем Linux / Debian / x86-64 это происходит.
Более внимательно прочитайте документацию , относящуюся к <stdio.h>
В общем, прочтите документацию каждая функция, которую вы используете.И выучите Как отлаживать небольшие программы
Этого можно добиться с помощью fgetc ()
Да и вВ вашем случае лучше использовать fgetc .Снова, прочитайте его документацию.Весьма вероятно, что fgetc
намного быстрее (с более низким уровнем), чем fscanf
.Большинство реализаций из fscanf
используют fgetc
(или его эквивалент).
Наконец, некоторые стандартные библиотеки C реализации бесплатное программное обеспечение .В Linux есть GNU glibc и musl-libc .Вы можете изучить их исходный код.Благодаря этому вы многому научитесь.Оба построены на Linux syscalls (2) .