Ваш код петли, пока он не читает ни одного слова, а затем завершает свою работу. Поэтому, если вы дадите ему несколько слов, он будет читать первый и выйти, а если вы дадите ему пустой ввод, он будет зацикливаться навсегда. В любом случае, он будет печатать только случайный мусор из неинициализированной памяти. Это, по-видимому, не то, что вы хотите, но чего вы хотите? Если вы просто хотите, чтобы прочитать и напечатать первое слово (если оно существует), следует использовать, если:
if (scanf("%15s", word) == 1)
printf("%s\n", word);
Если вы хотите, чтобы цикл до тех пор, как вы можете прочитать слово, использовать во время:
while (scanf("%15s", word) == 1)
printf("%s\n", word);
Кроме того, как уже отмечалось, вы должны дать слово массиву размер, который является достаточно большим для зсапЕ:
char word[16];
другие предположили, тестирование на EOF вместо проверки, сколько элементов Scanf совпадают. Это нормально для этого случая, когда scanf не может не совпадать, если нет EOF, но не так хорош в других случаях (например, для чтения целых чисел), где scanf не может ничего сопоставить без достижения EOF (если вход isn ' t число) и возврат 0.
редактировать
Похоже, вы изменили свой вопрос, чтобы соответствовать моему коду, который отлично работает, когда я запускаю его - петли чтения слов, пока EOF не будет достигнут, а затем завершает свою работу. Так что-то другое, что происходит с вашим кодом, возможно, связаны с тем, как вы кормите его вход, как предложил Дэвид
Какой ввод вы используете? Вы перенаправляете файл на 'stdin' или печатаете на консоли? Если последний, какую ОС вы используете и как вы печатаете в EOF? –