После небольшого исследования я осознал проблему, поэтому я публикую здесь свои выводы.
Внимательно изучив документацию, она объясняет, что fgets считывает символы из текущей позиции потока в и , включая первый символ новой строки , до конца потока или до тех пор, пока количество прочитанных символов не станет равным numChars - 1.
Итак, анализ переменная searchfor , с "end", то, что сохраняется в (буфере) переменной searchfor, - это "end", когда я использую scanf (), но "end \ n", когда я использую fgets (). Это потому, что в searchfor [30] достаточно места для включения символа новой строки.
Таким образом, strcmp () будет сравнивать «end» с «end \ n», никогда не возвращая 0 в результате. Поэтому решение моей проблемы состоит в том, что я либо использую scanf () для синтаксического анализа, либо удаляю символ новой строки "\ n" из анализируемой переменной.