程序运行出这样的结果 是哪里出了问题啊 (类)
#include "stdafx.h"#include "iostream"#include "string"using namespace std;class CTeacher{private: char ID[10]; char name[10]; char sex[2]; char date[15]; char kc[10];public: void TeacherInfo(char*,char*,char*,char*,char*); void OutTeacher();};void CTeacher::TeacherInfo(char* id,char* xm,char* xb,char* rq,char* xk){ strcpy(ID,id); strcpy(name,xm); strcpy(sex,xb); strcpy(date,rq); strcpy(kc,xk);}void CTeacher::OutTeacher(){ cout<<ID<<"\t"; cout<<name<<"\t"; cout<<sex<<"\t"; cout<<date<<"\t"; cout<<kc<<"\t"<<endl;}int _tmain(int argc, _TCHAR* argv[]){ cout<<"工号\t姓名\t性别\t\t出生日期\t课程\t"<<endl; CTeacher wg; wg.TeacherInfo("001","王小儿","女","91/5/15","语文"); wg.OutTeacher(); CTeacher hc; hc.TeacherInfo("002","李小四","男","92/12/15","数学"); hc.OutTeacher(); system("pause"); return 0;}// 222.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include "iostream"#include "string"using namespace std;class CTeacher{private: char ID[10]; char name[10]; char sex[3]; //加一个位置存放'\0' char date[15]; char kc[10];public: void TeacherInfo(char*,char*,char*,char*,char*); void OutTeacher();};void CTeacher::TeacherInfo(char* id,char* xm,char* xb,char* rq,char* xk){ strcpy(ID,id); strcpy(name,xm); strcpy(sex,xb); strcpy(date,rq); strcpy(kc,xk);}void CTeacher::OutTeacher(){ cout<<ID<<"\t"; cout<<name<<"\t"; cout<<sex<<"\t"; cout<<date<<"\t"; cout<<kc<<"\t"<<endl;}int _tmain(int argc, _TCHAR* argv[]){ cout<<"工号\t姓名\t性别\t出生日期\t课程\t"<<endl; CTeacher wg; wg.TeacherInfo("001","王小儿","女","91/05/15","语文"); //日期上加了一位,应该注意跳格键开始的位置,和跳过的格数 wg.OutTeacher(); CTeacher hc; hc.TeacherInfo("002","李小四","男","92/12/15","数学"); hc.OutTeacher(); system("pause"); return 0;}
[解决办法]
CTeacher::sex 的问题!汉字占两个字节,而 cout 输出时,在碰到 \r \n \0时停止输出,而内存存放sex和date衔接,需要给sex 一个额外的字符来存放 \0
[解决办法]
楼上的很正确!学习了!