C ++错误“并非所有控制路径都返回值”

时间:2013-06-18 18:57:07

标签: c++

我试图通过调用函数来输出字符串的反转。我认为我的反向功能有问题。 我一直收到错误"并非所有控制路径都返回一个值。"

#include<iostream>

using std::cout;
using std::endl;
using std::cin;
int LengthofString(    char *); // declaring prototype for length of the string 
int ReverseD(char *);

int main()
{
    char string1[100];
    cout<<"Enter a string: ";
    cin>>string1;

    cout<<"Length of string is "<<LengthofString(string1)<<endl<<ReverseD(string1)<<endl;

    system("PAUSE");
    return 0;
}

int LengthofString(   char *x)
{
    int index;
    for(index = 0; *x!='\0';x++,index++);

    return index;
}

int reverse(char* y)
{
  int ii, n;
  n = LengthofString(y); 
  for(ii=0; ii<n/2;ii++) {
    char temp;
    temp = y[ii];
    y[ii] = y[n - ii - 1];
    y[n - ii] = temp;
    return temp;
  }
}

5 个答案:

答案 0 :(得分:3)

reverse函数中,return循环内部for,如果符合条件,则可能无法执行。尝试将return语句移到循环之外。

您的返回变量也在循环范围内声明,因此您也需要更改它,但这至少会修复原始错误。

答案 1 :(得分:2)

您的reverse函数非常错误:当您希望它反转字符串时,它如何返回int?有几种方法可以解决它:

  • 删除return,然后创建函数void。在打印前调用它,然后输出原始文件。
  • 让它返回char*,然后返回y。将return语句移出循环。
  • 不要反转:复制字符串,然后反转;不要忘记为null终止符分配空间,并在完成后删除字符串的副本。

答案 2 :(得分:1)

当您传递空字符串或长度为1的字符串时,以下return循环中的for语句将不会被执行,

for(ii=0; ii<n/2;ii++) {
     char temp;
     temp = y[ii];
     y[ii] = y[n - ii - 1];
     y[n - ii] = temp;
     return temp;
}

答案 3 :(得分:0)

int reverse(char* y)
{
  int ii, n;
  n = LengthofString(y); 
  for(ii=0; ii<n/2;ii++) {
    char temp;
    temp = y[ii];
    y[ii] = y[n - ii - 1];
    y[n - ii] = temp;
    return temp;
  }
//because here you done have a return call; return something
}

答案 4 :(得分:0)

除了已经存在的优秀答案之外,让我向您展示如何反转字符串 C ++方式:

#include <string>
#include <iostream>
#include <algorithm>

int main()
{
    std::string s;
    std::cin >> s;
    std::reverse(s.begin(), s.end());
    std::cout << s << std::endl;

    return 0;
}

编辑:必须使用自己的函数不是在C ++中编写C代码的借口......

std::string reverseString(const std::string &input)
{
    std::string res;
    for (std::string::const_reverse_iterator it = input.rbegin(); it != input.rend(); it++)
        res += *it;

    return res;
}