C++错误"not all control paths return a value"

C++ error "not all control paths return a value"

本文关键字:return paths value all 错误 not C++ control      更新时间:2023-10-16

我试图通过调用函数输出字符串的反向。我想我的逆函数有点问题。我一直得到错误"不是所有的控制路径返回一个值。"

#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!='';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;
  }
}

reverse函数中,将return放入for循环中,如果满足条件,该循环可能不会执行。试着把return语句移出循环。

你的返回变量也在循环的作用域中声明,所以你也需要改变它,但这至少会修复你最初的错误。

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

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

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

for(ii=0; ii<n/2;ii++) {
     char temp;
     temp = y[ii];
     y[ii] = y[n - ii - 1];
     y[n - ii] = temp;
     return temp;
}
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
}

除了已经存在的优秀答案之外,让我向您展示如何用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;
}