我只想使用递归函数以相反的顺序打印数组。 以下是我的代码。这段代码反向打印所有字符但是第一个元素总是丢失,因为最后一次返回总是数组(1)(1是数组的索引.....我实际上并不知道内存地址)而不是阵列(0)。
代码:
#include<iostream>
using namespace std;
void array(char *s){
if(*s=='\0') return;
array(++s);
printf("%c",*s);
}
int main(){
char s[20];
gets(s);
cout<<"\n";
array(s);
return 0;
}
答案 0 :(得分:2)
更改方法:
void array(char *s){
if(*s=='\0') return;
array(s + sizeof(char));
printf("%c",*s);
}
要:
++s
因为s++
或printf
更改了影响router.patch('/api/data', function *(next) {
if (_.has(this.query, 'id')) {
// do data patch
this.status = 200;
this.body = yield {status: 200, body: 'OK'};
} else {
this.status = 304;
this.body = yield {status: 304, body: 'expecting id};
}
});
的指针变量,并使您始终打印下一个字符。
答案 1 :(得分:1)
更改
array(++s)
到
array(s+1)
因此您可以为s
语句保留printf
的正确值。
#include <iostream>
#include <stdio.h>
using namespace std;
void array(char *s){
if(*s=='\0') return;
array(s+1);
printf("%c",*s);
}
int main(){
char s[20];
gets(s);
cout<<"\n";
array(s);
return 0;
}
答案 2 :(得分:1)
你可以这样写 -
void array(char *s,int i)
{
if(s[i]=='\0') return;
array(s,i+1); // i declared in main as int i=0 and call as array(s,i) in main
printf("%c",s[i]);
}
答案 3 :(得分:0)
您的代码很好,但为什么您没有得到答案, &#39; \ 0&#39;当用户键入enter按钮时,这可以正常工作,但是,当用户输入输入时,他不会在开头键入enter,因此您的代码不适用于那一个字母。 现在要管理这个程序你可以这样做,将第一个字符存储在另一个变量中并最后显示它。
答案 4 :(得分:0)
只需使用array(s+1);
代替array(++s);
即可保留第一个值。
N.B:应该注意的是,在进行像这样的指针运算时最好使用sizeof()
。