C++编程小白求教,逆序输出字符串

#include
#include
#include
#include
//逆序输出字符串
using namespace std;

void print(const char a[],int size){
int i;
for(i=size;i>0;i--)
cout<<a[i-1];
cout<<endl;
}
void main(){

int i=0;
char a[50];
while(getchar()!='\n'){
    a[i] = getchar();
    i++;
}
print(a,sizeof(a));

while(1);

}

请问大神们,上面的代码错在哪里啊?

c++

8个回答

 #include <iostream>
#include <string.h>
//逆序输出字符串
using namespace std;
void print(const char a[],int size)
{
    int i;
    for(i=size-1;i>=0;i--)
    cout<<a[i];
    cout<<endl;
}
int main()
{
    int i=0;
    char a[50];
    cin>>a;
    print(a,strlen(a));
    return 0;
}

建议你这样,你用sizeof一般情况下是错的,按照你的定义sizeof(a)的值不管你输入多少数据都是50,strlen是检测字符串长度的,没有必要这么复杂得到字符串,一个cin就可以搞定。
再给你点建议,代码规范性,该空格的要空出来,不管自己还是别人看着都舒服。main函数类型尽量是int,并且给定返回值,现在新的编译器都不支持void类型的main函数,是会报错的。
图片说明
图片说明

u013750170
鸿羽_HongYu 把之前那个删掉吧
5 年多之前 回复
#include <stdio.h>

 void foo()
{
    char c = getchar();
    if (c == '\n')
        return;
    foo();
    printf("%c", c);
}

int main()
{
    foo();
    printf("\n");
    return 0;
}

for(i=size-1;i>=0;i--)

while循环判定中的getchar()会将第一个字符弹出,所以你无法记录到第一个字符串,而且sizeof(a),你不能用这个得出有效字符串长度,你只会得出这个数组长度
修改后:
do{
a[i] = getchar();
i++;
}while(a[i-1]!='\n');

print(a,i-1);

u013750170
鸿羽_HongYu 代码发上去显示有问题,醉了
5 年多之前 回复

数组的大小可以使i-1,不能够用sizeof。sizeof是整个数据的大小,不是数组实际存储内容的大小

错在print(a,sizeof(a));
改成print(a,i);就好

printf( strrev(str) ); //简单明了!!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问