Не читает слова из файла "input.txt" (24 строчка). Если getline заменить на fin >> word, то ничего не изменится. В чем проблема?
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
string wordsChecker(string checkWord) // функция для проверки слова
{
for (int i = 0; i < checkWord.length() - 1; i++)
{
if (checkWord[i] && checkWord[i + 1] == 'б', 'в', 'г', 'д', 'ж', 'з', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ')
{
return checkWord;
}
}
}
int main() {
setlocale(LC_ALL, "Russian");
string word;
ifstream fin("input.txt"); // текстовый файл для чтения
while (!fin.eof()) // цикл для вывода и получения слов
{
getline(fin, word);
cout << wordsChecker(word) << ' ';
}
system("pause");
return 0;
}
while (!fin.eof())- вы будете делать одно лишнее (неверное) чтение. А во-первых, вы проверяли, например, что файл открыт? в коде этого нет. Попробуйте для начала убедиться, что файл открыт, а после считывания просто выводитьwordбез обработки - для начала. – Harry Mar 25 '18 at 13:36wordпусто при чтении. Несмотря на это вместо слов которые проходят проверку выводятся вообще все слова которые есть в файле. – Dmitry Shevchenko Mar 25 '18 at 13:42checkWord[i] && checkWord[i + 1] == 'б', 'в', 'г',...? Оно всегда истинно. И что должна вернуть функцияwordsChecker, еслиcheckWord.length()будет равно 1? – wololo Mar 25 '18 at 13:45wordsCheckerвозвращает мусор и вызывает неопределенное поведение.checkWord[i + 1] == 'б', 'в', 'г', 'д'не сравнивает с каждой буквой из списка. – user7860670 Mar 25 '18 at 13:51checkWord[i] && checkWord[i + 1] == 'б', 'в', 'г',...? Как тогда по другому написать эту строчку чтобы проверка выполнялась корректно? – Dmitry Shevchenko Mar 25 '18 at 14:01checkWord.length()всегда будет равно1, я спросил, что по-вашему произойдёт, еслиcheckWord.length()будет равно1? Что по-вашему вернёт функция в такой ситуации? – wololo Mar 25 '18 at 14:02eofпочитайте: Почему считается что неправильно писать while (!input_stream.eof())? – wololo Mar 25 '18 at 14:04for. – Dmitry Shevchenko Mar 25 '18 at 14:06returnвыполнен не будет. В языке C++ если тип возвращаемого функцией значения отличен отvoid, то она обязана вернуть некоторое значение при помощи оператораreturn. Если это требование не выполнено, то может произойти всё что угодно.То есть, в вашем случае, в ситуациях, когда циклforне выполнится ни разу, произойдёт что-то нехорошее, например, программа аварийно завершиться. Таким образом, вы должны предусмотреть ситуацию, когда циклforне выполнится ни разу. – wololo Mar 25 '18 at 14:24return 0, то появится ошибка. Что тогда надо написать чтобы он возвращал слово только при правильной проверке? – Dmitry Shevchenko Mar 25 '18 at 14:49string, а значит и возвращать нужно либо объект типаstring, либо нечто, что может быть приведено к этому типу. Можно, например, написатьreturn string();, илиreturn "bad_word";Однако, по смыслу, функция предназначена для проверки того, удовлетворяет ли входная строка некоторому критерию или нет, и поэтому, возможно, лучшим решением будет поступить также как и в ответе Harry: сменить тип возвращаемого значения наboolи возвращатьtrueилиfalse. – wololo Mar 25 '18 at 16:43