写个C++程序,但是字符数组的值输出的是乱码什么情况??

源代码:
#include <iostream.h>
#include<string.h>

typedef struct
{
int course_num;
char course_name[20];
float course_score;
}course;

void input(course *cour,int i)
{
int j;
for(j=0;j<i;j++)
{cout<<"请输入第"<<j+1<<"科的课程编号、课程名称、课程成绩"<<endl;
cin>>cour[j].course_num;
cin>>cour[j].course_name[20];
cin>>cour[j].course_score;
}
}

void output(course *cour,int i)
{
int j;
for(j=0;j<i;j++)
{
cout<<"第"<<j+1<<"科的课程编号、课程名称、课程成绩分别为"<<endl;
cout<<cour[j].course_num<<"\t";
cout<<cour[j].course_name<<"\t";
cout<<cour[j].course_score<<"\n";
}
}
void main()
{
course *cour;
cour=new course;
course c[10];
input(c,10);
output(c,10);

}
功能是实现输入10课的成绩,结构体要包含(课程编号、课程名称,和课程成绩),这个课程名称怎么处理?
运行效果:

第1个回答  2013-09-22
你的代码有很多漏洞,很不规范
改成这样就行了:
#include <iostream>//头文件的写法不对
#include<string.h>
using namespace std;//有时候会用到,最好写上
typedef struct
{
int course_num;
char course_name[200];
float course_score;
}course;

void input(course *cour,int i)
{
int j;
for(j=0;j<i;j++)
{cout<<"请输入第"<<j+1<<"科的课程编号、课程名称、课程成绩"<<endl;
cin>>cour[j].course_num;
cin>>cour[j].course_name;//这里是错误的主要地方,注意输入字符串的格式
cin>>cour[j].course_score;
}
}

void output(course *cour,int i)
{
int j;
for(j=0;j<i;j++)
{
cout<<"第"<<j+1<<"科的课程编号、课程名称、课程成绩分别为"<<endl;
cout<<cour[j].course_num<<"\t";
cout<<cour[j].course_name<<"\t";
cout<<cour[j].course_score<<"\n";
}
}
int main()
{
//这里有没有意义的定义
course c[10];
input(c,10);
output(c,10);
}
第2个回答  2013-09-22
楼主注意字符数组的输入,cin>>字符数组的地址。改过来就没问题了
void input(course *cour,int i)
{
 int j;
 for(j=0;j<i;j++)
 {cout<<"请输入第"<<j+1<<"科的课程编号、课程名称、课程成绩"<<endl;
  cin>>cour[j].course_num;
  cin>>cour[j].course_name;
  cin>>cour[j].course_score;
 }
}

本回答被网友采纳
第3个回答  2013-09-22
void input(course *cour,int i)
{
int j;
for(j=0;j<i;j++)
{cout<<"请输入第"<<j+1<<"科的课程编号、课程名称、课程成绩"<<endl;
cin>>cour[j].course_num;
cin>>cour[j].course_name[20];
cin>>cour[j].course_score;
}
}
这里错了。
cin>>cour[j].course_name[20];这样操作数组越界了,而且即使没有越界,这样写也只是给数组的下标为20的元素赋值,并没有成功给整个数组赋值。
将 cin>>cour[j].course_name[20];改成 cin>>cour[j].course_name;就行了本回答被提问者采纳
第4个回答  2013-09-22
那个地方没有成功赋值的话就是乱码,你把原来的初始化为零试试,估计输出来就都是零了
相似回答