我遇到了这个问题,我无法让它工作
#include <stdio.h>
#include <string.h>
void RecursiveReverse(char word)
{
if (word == '\0')
return;
RecursiveReverse(word + sizeof(word));
printf("%c", word);
}
int main(void)
{
printf("enter a word please =>");
char toBeRev;
scanf("%s", toBeRev);
RecursiveReverse(toBeRev);
printf("\n");
}
我应该请求一个词,并将它发送到一个函数以将其反转。
第一个错误你做了这样的事情:
char toBeRev;
scanf("%s", toBeRev);
因此您尝试用用户输入填充 toBeRev,但 %s 使用的是 char*
而不是 char
所以你必须有一个可以包含用户输入的缓冲区。
char input[4096] = {0};
然后你说你只需要以相反的顺序打印字符串,所以你不需要改变你的字符串的值,你从递归函数开始(这是个好主意)
我按照你的例子做了一些事情
void reverse(const char *str) //you don't need to modify your string
{
if (*str != '\0') //if the first character is not '\O'
reverse((str + 1)); // call again the function but with +1 in the pointer addr
printf("%c", *str); // then print the character
}
int main()
{
char input[4096] = {0};
printf("Enter a word please => ");
scanf("%s", input);
reverse(input);
printf("\n");
return (0);
}
所以如果输入是'Hi',在输入中你将有['H']['I']['\0']
第一个反转字符串的调用是 ['H']['I']['\0']
第二次调用字符串将是 ['I']['\0']
第三次通话 ['\0']
然后打印字符串的第一个字符
IH