ВСЕГДА проверьте возвращаемое значение из fopen()
, вызов которого, кажется, отсутствует.
FILE *inFile = fopen(filename, "r");
if (inFile == 0)
...diagnose error...do not use inFile...
Обратите внимание на отсутствие &
из filename
взвонок на fopen()
;вам это просто не нужно.
printf()
перед fscanf()
ничего не производит, поскольку строка вывода не заканчивается новой строкой;он удерживается до тех пор, пока вы не напечатаете новую строку, и сбой не произойдет до того, как вы это сделаете.
Сбой происходит, потому что строка "r"
не является допустимым файловым потоком;если бы вы на самом деле вызвали fopen()
, это, вероятно, произошло бы из-за того, что открытие не удалось, и вы не проверили его.
Если ваш компилятор не дал вам предупреждений о коде, найдите лучший компилятор.Если он действительно давал вам предупреждения, научитесь прислушиваться к ним (и исправлять их), прежде чем отправлять сообщения в StackOverflow.
Пока вы это делаете, вы можете подумать, что произойдет, если слово, которое вы получитепрочитано 50 символов или больше.Счастья не бывает.Вам следует рассмотреть возможность использования:
while (fscanf("%49s", word) == 1)
wordCount++;
Если слово длиннее 49 символов, оно по крайней мере теперь будет разбито на некоторое количество 49-байтовых блоков (каждое считается словом) без предоставления буферапроблемы переполнения (еще один источник сбоев).Если вам нужна диагностическая печать в цикле, пусть будет так;добавьте фигурные скобки и напечатайте.
У меня очень, очень редко была причина использовать feof()
в моей (25+ год) карьере программиста.Код, использующий его, обычно подозрительный;Интересно, изучил ли этот человек Паскаль и не разучил его при изучении C.