C++的小问题...中文输出为乱码.

#include<iostream>usingnamespacestd;#include<string>classps{private:inta;public:charn... #include<iostream>using namespace std;
#include<string>
class ps
{
private:
int a;
public:
char n[20];
char x;

void setage(int); int getage();
void setname(char n[20]);
char *getname();
void setsex(char);
char getsex();
};
void ps::setage(int a1)
{a=a1;}
int ps::getage()
{return a;}

void ps::setname(char n1[20]){n[20]=n1[20];}
char *ps::getname()
{return n;}

void ps::setsex(char x1){x=x1;}
char ps::getsex()
{return x;}
void main()
{
ps p;
p.setage(18);
cout<<p.getage()<<endl;
p.setname("张三");
cout<<p.getname()<<endl;
p.setsex('M');
cout<<p.getsex()<<endl;
}

分别是年龄 姓名 性别..n[20]存储姓名...我运行之后出现的为乱码...
请帮我修改一下..
展开
 我来答
zhang123_028
2013-03-03 · TA获得超过192个赞
知道小有建树答主
回答量:151
采纳率:100%
帮助的人:35.5万
展开全部
我看也挺悲剧的,你貌似不知道指针的概念吧,我想的只是姓名的输出是错误的,年龄应该正常,如果不是那就不用看了,看看你的函数setname(char[] name)然后你传参数"张三",(我就奇怪为啥编译通过了,看着怪怪的)。现在穿进去的参数是什么?是”张三“的地址,然后你再n[20]=n1[20](不可能通过吧,n[20]的地址是不能改变的啊,毁三观啊)n[20]本来是有一段内存的,现在直接让他指向了”张三“。你是不是要说这不就直接输出了么,可是这个”张三“并不是一直存在的啊。过一会就没了。

给你一个方法试试
vodi setname(char *n)
{
strcpy(this->n,n)
}
不过我更建议你使用string 既然用c++就应该有c++风格,你用的字符串叫c类型的字符串。
我还建议你这种问题以后自己调试,单步调试一步一步看,只有这样你才能慢慢的入门。当然如果为了开始,那就没有必要了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhoujiong1004
2013-03-03 · TA获得超过357个赞
知道小有建树答主
回答量:402
采纳率:100%
帮助的人:354万
展开全部
ok,改好了。
/*#include <stdio.h>
int main()
{
int m,n;
printf("Enter m,n;" ) ;
scanf("%d%d",&m,&n);
while(m!=n)
{ while (m>n)m-=n;
while (n>m)n-=m;
}
printf("m=%d\n n=%d",m,n);
}
*/
#include<iostream>
#include<string>
using namespace std;

class ps
{
private:
int a;
public:
char n[20];
char x;

void setage(int);
int getage();
void setname(const char n[20]);
char *getname();
void setsex(char);
char getsex();
};
void ps::setage(int a1)
{a=a1;}
int ps::getage()
{return a;}

void ps::setname(const char n1[20])
/*{n[20]=n1[20];} 这样写肯定是不对的!!*/
{
strcpy(n,n1);
}

char *ps::getname()
{return n;}

void ps::setsex(char x1){x=x1;}
char ps::getsex()
{return x;}
void main()
{
ps p;
p.setage(18);
cout<<p.getage()<<endl;
p.setname("张三");
cout<<p.getname()<<endl;
p.setsex('M');
cout<<p.getsex()<<endl;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
009螃蟹
2013-03-03 · TA获得超过177个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:116万
展开全部
将void setname(char n[20]);改为void setname(const char* n);或者void setname(string n);试试

记得还要修改函数体哦!!
追问
还是很悲剧.. 还是该死的烫烫烫...
追答
#include
#include
using namespace std;
class ps
{
private:
int a;
public:
string n;
char x;
public:
void setage(int); int getage();
void setname(string m);
string getname();//修改为string的返回类型,这样才能够正确的接受name
void setsex(char);
char getsex();
};
void ps::setage(int a1)
{a=a1;}
int ps::getage()
{return a;}

void ps::setname(string m){n = m;}//修改为string m, 这样才能正确的设置name
string ps::getname()
{return n.c_str();}

void ps::setsex(char x1){x=x1;}
char ps::getsex()
{return x;}
int main()
{
ps p;
p.setage(18);
cout<<p.getage()<<endl;
p.setname("张三");
cout<<p.getname()<<endl;
p.setsex('M');
cout<<p.getsex()<<endl;
return 0;
}
//OK,可以了!你刚刚其实是将常量当做字符使用了!呵呵,加油吧!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
carea
2013-03-03 · TA获得超过459个赞
知道小有建树答主
回答量:395
采纳率:65%
帮助的人:102万
展开全部
http://blog.csdn.net/clamreason/article/details/7935258

关于处理中文,你还是使用专门处理中文的数组和标准库组件吧,这样以来代码清晰,以免使用旧的C中的库组件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式