«Не все пути управления возвращают значение» - PullRequest
2 голосов
/ 12 марта 2011

** РЕДАКТИРОВАТЬ: в дополнение к ошибкам, указанным ниже, я по ошибке пытался скомпилировать его как проект Win32, согласно этому коду ошибки

1> MSVCRTD.lib (crtexew.obj): ошибка LNK2019: неразрешенный внешний символ WinMain @ 16>, на который ссылается функция _ _tmainCRTStartup так что кризис предотвращен и домашняя работа завершена. Спасибо всем большое за вашу помощь. надеюсь, я смогу так же заплатить сообществу, когда узнаю вещь или две. **

В этом задании мы должны использовать рекурсию в качестве метода определения того, относится ли слово к палиндрому. Хотя я все еще изо всех сил пытаюсь освоиться с ним как с механизмом решения проблем, кажется, что этот код должен работать иначе. Однако компилятор выдает ошибку «не все пути управления возвращают переменную». Есть идеи?

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

bool palcheck(string word, int first, int last);

int main()
{
  ofstream palindrome, NOTpalindrome;
  ifstream fin;
  string word;

  palindrome.open("palindrontest.txt");
  NOTpalindrome.open("notPalindronetest.txt");
  fin.open("input5.txt"); //list of palindromes, one per line

  if (palindrome.fail() || NOTpalindrome.fail() || fin.fail())
    return -1;

  while (fin >> word)
  {
    if (palcheck(word, 0, (word.size()-1)) == true)
      palindrome << word << endl;
    else
      NOTpalindrome << word << endl;
  }

  palindrome.close();
  NOTpalindrome.close();
  fin.close();

  return 0;
}

bool palcheck(string word, int first, int last)
{
if (first >= last)
return true;

else if (word[first] == word[last])
return palcheck(word, first+1, last-1);

else// (word[first] != word[last])
return false;

}

Ответы [ 4 ]

2 голосов
/ 12 марта 2011

Ошибка в вашей функции palcheck.Если бы выражение в else if было истинным, функция не вернула бы значение.

Это должно исправить следующее:

bool palcheck(string word, int first, int last)
{
  if (first == last)
    return true;

  else if (word[first] == word[last])
    return palcheck(word, first+1, last-1);

  else// ((word[first] != word[last]) || (first > last))
    return false;
}
2 голосов
/ 12 марта 2011

Ошибка в вашей функции проверки, вы забыли вернуть значение рекурсивной функции

bool palcheck(string word, int first, int last)
{
if (first == last)
return true;

else if (word[first] == word[last])
return palcheck(word, first+1, last-1); // <- this return ;)

else// ((word[first] != word[last]) || (first > last))
return false;
}
1 голос
/ 12 марта 2011
bool palcheck(string word, int first, int last)
{
if (first == last)
  return true;
else if (word[first] == word[last])
  palcheck(word, first+1, last-1); // <-here
else
  return false;

// <-reaches here
}

Проблема отмечена here выше. Когда выбран этот случай, вы ничего не возвращаете из функции, что является проблемой. Вы, вероятно, должны использовать:

  return palcheck(word, first+1, last-1);
1 голос
/ 12 марта 2011
if (first == last)

должно быть

if (first >= last)

в случае четного числа букв.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...