JohnMcG дал отличный ответ на вашу ближайшую проблему, но есть и другие вещи, которые могут быть обеспокоены тем, что не будет вписываться в комментарий. Помните, что массив символов может содержать строку на один символ, меньшую ее длины, поэтому используйте длину MAX_WORD_LENGTH + 1
. Я также предлагаю инициализировать эти строки для нулевой строки, так что в начале каждой строки перед циклом есть «\ 0».
Есть ли какой-либо надежный предел длины слов? Если нет, проблема будет более тесно связана с строками C-стиля (хотя и не с C++-строками). Вам придется выделять указатели (как есть) и перераспределять их по мере необходимости при чтении символа по символу. Скудно, и это один случай, когда я рекомендую использовать malloc()
/free()
/realloc()
, а не управление памятью C++.
Я предполагаю, что вы уже знаете, что вы читаете слова, а не линии. Имя вашего массива предполагает, что это обычная ошибка среди учащихся.
Вы не объявили i
в инструкции for
, так что это переменная с внешней областью, что позволяет использовать ее значение позже. Если да, помните, что .eof()
не означает, что программа закончилась, это означает, что программа попыталась прочитать конец файла.Если файл заканчивается символом пробела (например, «\ n»), он будет читать последнее слово, а затем увеличивать i
и ничего не читать. Если это не так, он попытается прочитать за конец файла при чтении последнего слова и не будет увеличивать значение i
.
Если вам нужен подсчет слов, то, что вам нужно настроит память, как упоминались выше, и вы должны проверить, является ли words[i]
пуст или нет (strlen()
является излишеством, проверьте первый символ для \0
).
может захотеть проверить другие биты ошибки (сбой и т. Д.) – Tom
Что такое inputFile? – Patrick
inputFile - это поток, как указано в заголовке. –