注册 登录
编程论坛 VC++/MFC

小弟执行过程中总是出现这两个不能解决的问题,求讲解!

biedyzjm 发布于 2010-10-25 18:19, 997 次点击
我如此弄了一个程序,目的是利用顺序表输入五位同学的基本信息并输出,程序如下:

#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2;
#define OK 1;
typedef int status;
typedef int Elemtype;
#define LIST_INIT_SIZE 1000
#define Listcrement 100
void main()
{
typedef struct{
Elemtype *elem;
int length;
int listsize;
    }sqlist;
//顺序表动态分配存储结构
status initList_sq(sqlist &L)
{
L.elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
if(!L.elem) exit(OVERFLOW);
  L.length=0;
  L.listsize=LIST_INIT_SIZE;
  return OK;
}
//初始化线性表
struct date
{
  int year;
  int month;
  int day;
}bir[5];
//定义时间结构组
struct student
{
  long int num;
  char name[10];
  struct date birthday;
  
}stu[5];
//定义学生信息结构组

int i, j;
for(i=0;i<5;i++)
{scanf("%d,%s,%d,%d,%d",&stu[i].num,&stu[i].name,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);}
for(j=0;j<=i;j++)
{printf("Num:%5d Name:%5s Birthday:%5d\n",stu[j].num,stu[j].name,stu[i].birthday);}
}

但是我执行的时候总是有个错误提示一个错误
error C2601: 'initList_sq' : local function definitions are illegal
执行 cl.exe 时出错.

我不知道怎么解决,于是把
status initList_sq(sqlist &L)
{
L.elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
if(!L.elem) exit(OVERFLOW);
  L.length=0;
  L.listsize=LIST_INIT_SIZE;
  return OK;
}
这一段删了,提示没有错误,就开始执行程序,输入以后出现如图示悲剧;
只有本站会员才能查看附件,请 登录


各位高人,如何解决这些个问题,小弟坐等!!!谢谢了!!
因为是新手,所以没分的!!
11 回复
#2
shafeilong2010-10-25 19:31
你后面输入的4个整数被默认为字符串读进去了
可以考虑用人机交互的方法分隔整数和字符串,比如用Printf提示

最后,你的birthday输出要3个"%d"   你直接用stu[i].birthday是不对的  应该在birthday后面具体精确到年月日
#3
biedyzjm2010-10-25 20:44
回复 2楼 shafeilong
你好,请你具体解释下人机交互式那个方法!这个我实在搞不出来……谢谢!
#4
取而代之2010-10-25 20:47
用到顺序表了?
#5
m21wo2010-10-25 20:47
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2;
#define OK 1;
typedef int status;
typedef int Elemtype;
#define LIST_INIT_SIZE 1000
#define Listcrement 100
typedef struct{
    Elemtype *elem;
    int length;
    int listsize;
}sqlist;

//初始化线性表
struct date
{
    int year;
    int month;
    int day;
}bir[5];
//定义时间结构组
struct student
{
    long int num;
    char name[10];
    struct date birthday;

}stu[5];
//定义学生信息结构组

status initList_sq(sqlist &L)
{
    L.elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
    if(!L.elem)
        exit(-2);
    L.length=0;
    L.listsize=LIST_INIT_SIZE;
    return OK;
}
void main()
{
    //顺序表动态分配存储结构

    int i, j;
    for(i=0;i<5;i++)
    {scanf("%d,%d,%d,%d,%s",&stu[i].num,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day,&stu[i].name);}
    for(j=0;j<i;j++)
    {printf("Name:%s  Num:%5d  Birthday:%d%d%d\n",stu[j].name,stu[j].num,stu[j].birthday.year,stu[j].birthday.month,stu[j].birthday.day);}
}
只有本站会员才能查看附件,请 登录

按你那么写 把字符串放在中间输入的话,当输入姓名后你再输入分号它会默认为分号是name的一部分,根本起不到数据输入的作用。而后面的什么生日都赋值为0,故你可以把姓名放在最后输入就不会出现那种状况了!

或者姓名单独输入也不会出现那种状况了

[ 本帖最后由 m21wo 于 2010-10-25 20:49 编辑 ]
#6
biedyzjm2010-10-25 21:56
回复 3楼 biedyzjm
恩,是的!老师说一定要用顺序表,现在又布置一个用链来完成!!头大了!
#7
biedyzjm2010-10-25 22:04
回复 4楼 取而代之
太感谢了,怎么我就没想到把name弄到最后去!!!
呵呵!!
#8
m21wo2010-10-25 22:19
是我说的!怎么是 4楼的啊 !
#9
Tveiker2010-10-26 01:14
怎么插图的啊?
#10
biedyzjm2010-10-26 12:23
回复 8楼 m21wo
额!!!点错了就回了……
#11
biedyzjm2010-10-26 13:14
回复 8楼 m21wo
    你好,昨天你教我那个我已经弄出来了,按照你所写的那样!!
    现在我又有两个问题,要接着在刚刚的程序后面接着做两个操作。一开始不是输入了五个同学的信息并且输出了嘛,现在要接着删除第二个同学的信息,并输出结果,完了以后再在第四个学生前面输入一个学生的信息。

    删除的操作我写出来如此:
    status ListDelete_sq(sqlist &L, int k, Elemtype &e)
{   

    if((k<1)||(k>L.length))   
        return ERROR;
    p=&(L.elem[k-1]);
    e=*p;
    q=L.elem+L.length-1;
    for(++p;p<=q;++p)
        *(p-1) = *p;
    --L.length;
    return OK;
}
但是删除的主程序我就不知道怎么写出来了。插入第四个同学的信息情况也一样:
status ListInsert_sq(sqList &L,int m, Elemtype e);
{   
    if(m<1||m>L.length=1)    return ERROR;
    if(L.length>=L.listsize)
    {
        newbase=(Elemtype *)realloc(L.elem,(L.listsize+Listcrement)*sizeof(Elemtype));
        if(!newbase)    exit(OVERFLOW);
        L.elem=newbase;
        L.listsize+=Listcrement;
    }
    q=&(L.elem[m-1]);
    for(p=&(L.elem[L.length-1]);p>=q;--p)
        *(p+1)=*p;
    *q=e
        ++L.length;
    return OK;
}

算法弄出来后面接着的主程序也不会写,好痛苦。它提示的那些错误都不知道怎么解决,你能教教我吗?谢谢了!
#12
heyufenger2010-10-26 15:48
热情一顶!
1