我看也挺悲剧的,你貌似不知道指针的概念吧,我想的只是姓名的输出是错误的,年龄应该正常,如果不是那就不用看了,看看你的函数setname(char[] name)然后你传参数"张三",(我就奇怪为啥编译通过了,看着怪怪的)。现在穿进去的参数是什么?是”张三“的地址,然后你再n[20]=n1[20](不可能通过吧,n[20]的地址是不能改变的啊,毁三观啊)n[20]本来是有一段内存的,现在直接让他指向了”张三“。你是不是要说这不就直接输出了么,可是这个”张三“并不是一直存在的啊。过一会就没了。
给你一个方法试试
vodi setname(char *n)
{
strcpy(this->n,n)
}
不过我更建议你使用string 既然用c++就应该有c++风格,你用的字符串叫c类型的字符串。
我还建议你这种问题以后自己调试,单步调试一步一步看,只有这样你才能慢慢的入门。当然如果为了开始,那就没有必要了。
ok,改好了。
/*#include
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
#include
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<
cout<
cout<
将void setname(char n[20]);改为void setname(const char* n);或者void setname(string n);试试
记得还要修改函数体哦!!
http://blog.csdn.net/clamreason/article/details/7935258
关于处理中文,你还是使用专门处理中文的数组和标准库组件吧,这样以来代码清晰,以免使用旧的C中的库组件