Самый простой способ - <a href="http://linux.die.net/man/3/rewind" rel="nofollow">rewind()</a>
поток, с простым
rewind(fp2);
Это то, что вам нужно, так как это не «цикл», который должен быть сброшен. Цикл просто повторяется по строкам входного файла, и сам цикл не может быть «перезапущен» без какого-либо изменения состояния файла. К счастью, это именно то, что делает rewind()
, поскольку он сбрасывает файл таким, каким он был сразу после того, как вы его открыли.
Как уже отмечали другие, это очень неэффективный способ проверки текста по словарю, поскольку итерации на основе файлов повторяются для каждого проверяемого слова ввода. Файлы не особенно быстрые, особенно по сравнению с данными в памяти. Так что, вероятно, будет большой выигрыш, если вы сделаете это для больших наборов ввода, чтобы построить какой-то словарь в памяти на основе ввода файла.
Это может быть очень просто, я бы рекомендовал начать с массива слов, которые вы сначала сортируете (с помощью <a href="http://linux.die.net/man/3/qsort" rel="nofollow">qsort()</a>
), а затем выполняете поиск с использованием двоичного поиска (доступно в стандартной библиотеке <a href="http://linux.die.net/man/3/bsearch" rel="nofollow">bsearch()</a>
) функция). При построении исходного массива вы можете использовать <a href="http://linux.die.net/man/3/realloc" rel="nofollow">realloc()</a>
для его динамического увеличения, поскольку при открытии файла словаря вы не можете знать, сколько слов в нем содержится.