读书人

C语言新手有几个小问题求解关于校通

发布时间: 2013-03-28 10:20:24 作者: rapoo

C语言新手有几个问题求解,关于校通讯录的输入函数问题
想使用自己定义的Stu_input函数来完成数据录入的工作,结果编译时提示Stu_input函数那里出错。自己又找不到到底哪里出错了。把Stu_input整个函数注释掉之后编译时不会报错了,但运行又会报错。新人第一帖,请各位高手给指点指点

#include<stdio.h>
#include<stdlib.h>
typedef struct{
char id[5];//学生学号
char name[11];//学生名字
int age;//学生年龄 
int math;//数学成绩 
int eng;//英语成绩 
int ds;//数据结构成绩
int os;//操作系统成绩
}Student_type;

void Stu_print(Student_type print){//按顺序输出数组内各个数据
printf("Student id: %s\n",print.id[5]);
printf("Student name: %s\n",print.name[11]);
printf("Student age: %d\n",print.age);
printf("Student math: %d\n",print.math);
printf("Student eng: %d\n",print.eng);
printf("Student ds: %d\n",print.ds);
printf("Student os: %d\n",print.os);
}

void Stu_input(Student_type &dat){
printf("Please input student's id: ");
scanf("%s",dat.id);
printf("Please input student's name: ");
scanf("%s",dat.name);
printf("Please input student's age: ");
scanf("%d",&dat.age);
printf("Please input student's math: ");
scanf("%d",&dat.math);
printf("Please input student's eng: ");
scanf("%d",&dat.eng);
printf("Please input student's ds: ");
scanf("%d",&dat.ds);
printf("Please input student's os: ");
scanf("%d",&dat.os);
}

int main(){
int i,stunum=0;
Student_type *data;
printf("Input stunum: ");
scanf("%d",&stunum);//记录需要开辟的空间
data=(Student_type *)malloc(stunum*sizeof(Student_type));
for(i=0;i<stunum;++i){
Stu_input(*(data+i));
}
for(i=0;i<stunum;++i){
Stu_print(*(data+i));
}
free(data);
return 0;
}
C input 通讯录
[解决办法]
1、
void Stu_print(Student_type print){    //按顺序输出数组内各个数据
printf("Student id: %s\n",print.id[5]);
printf("Student name: %s\n",print.name[11]);


越界,print.id和print.name就行了;
2、Student_type *data指向的是一个student,你想声明一组要用Student_type **data,
3、至于input没看出错来;
[解决办法]
我在vc2005里进行调试了下,没问题,我这没有vs2012的环境,很抱歉。看你在4楼所描述的错误信息,你自己可以试着修改下。
全部代码如下:

#include<stdio.h>
#include<stdlib.h>
typedef struct
{
charid[5]; // 学生学号
charname[11]; // 学生名字
intage; // 学生年龄 
intmath; // 数学成绩 
inteng; // 英语成绩 
intds; // 数据结构成绩
intos; // 操作系统成绩
}Student_type;

void Stu_print(Student_type &print)// 传引用
{ //按顺序输出数组内各个数据
printf("Student id: %s\n",print.id);// 非print.id[5],print.id[5]表示id字符数组中的第5个元素,如果你的id为:123,就不会有id[5]这个元素被打印出来。
printf("Student name: %s\n",print.name);// 非print.name[11]
printf("Student age: %d\n",print.age);


printf("Student math: %d\n",print.math);
printf("Student eng: %d\n",print.eng);
printf("Student ds: %d\n",print.ds);
printf("Student os: %d\n",print.os);
}

void Stu_input(Student_type &dat)
{
printf("Please input student's id: ");
scanf("%s",dat.id);
printf("Please input student's name: ");
scanf("%s",dat.name);
printf("Please input student's age: ");
scanf("%d",&dat.age);
printf("Please input student's math: ");
scanf("%d",&dat.math);
printf("Please input student's eng: ");
scanf("%d",&dat.eng);
printf("Please input student's ds: ");
scanf("%d",&dat.ds);
printf("Please input student's os: ");
scanf("%d",&dat.os);
}

int main()
{
int i,stunum=0;

Student_type *data;
printf("Input stunum: ");
scanf("%d",&stunum); //记录需要开辟的空间

data=(Student_type *)malloc(stunum*sizeof(Student_type));

for(i=0;i<stunum;++i)
{
Stu_input(*(data+i));
}

for(i=0;i<stunum;++i)
{
Stu_print(*(data+i));
}

free(data);

system("pause");
return 0;
}


结果如图:
C语言新手有几个小问题求解,关于校通讯录的输入函数有关问题

读书人网 >C语言

热点推荐