+ -
当前位置:首页 → 问答吧 → 程序运行出这样的结果 是哪里出了问题啊 (类)

程序运行出这样的结果 是哪里出了问题啊 (类)

时间:2011-11-28

来源:互联网

C/C++ code

#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;
}



程序运行出这样的结果 是哪里出了问题啊(多出个出生日期,而且字符“语文”也没有对齐)求高人指点!

工号 姓名 性别 出生日期 课程
001 王小儿 女91/5/15 91/5/15 语文
002 李小四 男92/12/15 92/12/15 数学
请按任意键继续. . .

作者: fz19910125   发布时间: 2011-11-28

多出个出生日期
cout<<date<<"\t";

作者: ouyh12345   发布时间: 2011-11-28

C/C++ code
// 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;
}


这样该就可以了。具体为什么我也说不清。因为编译器的不同,有些东西还是要时间使用的。

作者: ni_meri   发布时间: 2011-11-28

CTeacher::sex 的问题!汉字占两个字节,而 cout 输出时,在碰到 \r \n \0时停止输出,而内存存放sex和date衔接,需要给sex 一个额外的字符来存放 \0

作者: Linux_wlj   发布时间: 2011-11-28

楼上的很正确!学习了!

作者: Og192   发布时间: 2011-11-28