使用逻辑短路时出现“错误:预期表达式”

问题描述 投票:0回答:1

我有一个 C 语言编程作业,要求在不使用 if-else 语句或三元运算符的情况下反转字符串,因此我们必须使用递归和逻辑短路来实现任务。

这是我实现的用于反转给定字符串的函数:

void reverse(char* str, int start, int end)
{
    ((start >= end) && (return));
    
    char tmp = str[start];
    str[start] = str[end];
    str[end] = tmp;
    
    reverse(str, start + 1, end - 1);
}

但是,C 编译器会抱怨 return 语句并输出“错误:预期表达式”。

每当 (start >= end) 计算结果为 true 时,我应该如何实现 return 语句?

c compiler-errors
1个回答
0
投票

任何理智的程序员都不会这样做。但现实世界的规则在某些编程课程中似乎并不有效。

您的编译器是正确的,您不能将

return
与逻辑 AND 运算符一起使用。

为此您需要一个表达式,而

return
不是表达式。

你可以做的是调用一个函数。只要有返回值,就是表达式。

如果不允许更改

reverse
函数的签名,则需要引入一个辅助函数:

bool crazy_assignment_helper(char *str, int start, int end)
{
  // Assume we are called with valid arguments.
  // swap first and last character
  char tmp = str[start];
  str[start] = str[end];
  str[end] = tmp;

  // Continue with inner part if we are not done yet.
  ((start+1) < (end-1)) && reverse(str, start+1, end-1);
}

void reverse(char *str, int start, int end)
{
  crazy_assignment_helper(str, start, end)
}

这假设初始调用是使用有效值进行的。

我希望老师事后会告诉你,你永远不应该在工作中的实际项目中使用这样的代码。

© www.soinside.com 2019 - 2024. All rights reserved.