| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 627 人关注过本帖
标题:一个简单的程序 有几处相同的错误 希望各位能帮帮我,感激不尽
只看楼主 加入收藏
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
结帖率:83.33%
收藏
已结贴  问题点数:40 回复次数:7 
一个简单的程序 有几处相同的错误 希望各位能帮帮我,感激不尽
程序代码:
// 学生成绩管理系统.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdlib.h"

#define N 4

typedef struct
{
    char *name;  //学生的姓名
    int num;   //学生的学号
    int score;  //学生的分数
    struct *next;
}student;

int i;

//新建函数
student * initial(student * stu)
{
    student *p,*q;
    p=(student *)malloc(sizeof(student));
    stu->next=p;
   
    for(i=1;i<=4;)
    {
        q=(student *)malloc(sizeof(student));
        printf("第%d个学生的信息:姓名  学号 分数\n");
        scanf("%c%d%d",&q->name,&q->num,&q->score);
        printf("\n");
        p=q;
        p=p->next;
        p->next=NULL;
        free(q);

    }
    free(p);
    return stu;

}


//输出函数
void print(student * stu)
{
  
    student *p;
    p=stu->next;
   
    for(i=1;(i<=4)&&(p->next);i++,p=p->next)
    {
        p=(student *)malloc(sizeof(student));
        printf("第%d个学生的信息:姓名%5c  学号%5d 分数%5d\n",i,p->name,p->num,p->score);
        free(p);
    }
}

//查找函数
void find(student * stu)
{
    int n;
    printf("按学号查找!\n");
    student *p;
    p=stu->next;
    p=(student *)malloc(sizeof(student));
    printf("查找的学号:");
    scanf("%d",&n);
    for(;p->next;p=p->next)
    {
        if(p->num==n)
        {  
            printf("查找成功\n");
            printf("此学生的信息:姓名%5c  学号%5d 分数%5d\n",p->name,p->num,p->score);
        }

    }
    if(p==NULL)
        printf("无此学生!!!\n");
    free(p);
}

//插入函数
student * insert(student * stu)
{

    student *p,*q;
    p=stu->next;
    p=q=(student *)malloc(sizeof(student));
    printf("输入插入学生的信息 姓名 学号 分数\n");
    scanf("%c%d%d",&q->name,&q->num,&q->score);
    for(;p->next;p=p->next);
    p->next=q;
    p=p->next;
    q->next=NULL;
    return stu;

}

//删除函数
student *del(student * stu)
{
    student *p,*q,*r;
    int n;
    p=stu->next;
    p=q=r=(student *)malloc(sizeof(student));
    printf("输入删除学生的姓名\n");
    scanf("%c%d%d",&q->name);
    for(;p->next;p=p->next)
    {
        if(p->num==n)
        {  
            printf("此学生的信息:姓名%5c  学号%5d 分数%5d\n",p->name,p->num,p->score);
            r=q->next;
            q->next=r->next;
        }
        q=p;

    }
    if(p==NULL)
        printf("无此学生!!!\n");
    return stu;
}



int main(int argc, char* argv[])
{
    student *stu;
    stu=(student*)malloc(N*sizeof(student));
    stu->next=NULL;
    int choice,flag=1;
    do{
   
        printf("1:输入 姓名 学号 分数 名次\n 2:输出\n 3:查找\n 4:插入\n 5:删除\n");
        scanf("%d",&choice);
        switch(choice){

       
           case 1:stu=initial(stu);
               break;
       
           case 2:print(stu);
               break;
       
           case 3:find(stu);
               break;
       
           case 4:stu=insert(stu);
               break;
       
           case 5:stu=del(stu);
               break;
            printf("是否继续 1:是    0:否\n");
            scanf("%d",&flag);

        }
    }while(flag);
    printf("Hello World!\n");
    return 0;
}

本人对内存的分配不是很清楚
链表也不是很好
写了个程序  出现得都是相同的错误
希望各位能够帮帮我
我会很感激的
搜索更多相关主题的帖子: 感激不尽 
2010-04-25 21:59
woodydongli
Rank: 2
等 级:论坛游民
帖 子:57
专家分:84
注 册:2010-4-4
收藏
得分:13 

typedef struct
{
    char *name;  //学生的姓名
    int num;   //学生的学号
    int score;  //学生的分数
    struct *next;
}student;
这里的定义应该在struct 后面加个名字。
比如:我这里加的是一个名字stud,名字随便取。
typedef struct stud
{
    char *name;  //学生的姓名
    int num;   //学生的学号
    int score;  //学生的分数
    struct stud *next;
}student;
相应的在结构体内的next指针前也用个名字。

但是,我看你的程序里,好像有些功能需要完善,细节需要注意。。你自己弄了。哈哈
2010-04-25 22:23
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:13 
#include <stdio.h>
#include "stdlib.h"

#define N 4

typedef struct node
{
    char *name;  //学生的姓名
    int num;   //学生的学号
    int score;  //学生的分数
    struct node *next;
}student;

int i;

//新建函数
student * initial(student * stu)
{
    student *p,*q;
    p=(student *)malloc(sizeof(student));
    stu->next=p;
   
    for(i=1;i<=4;)
    {
        q=(student *)malloc(sizeof(student));
        printf("第%d个学生的信息:姓名  学号 分数\n");
        scanf("%c%d%d",&q->name,&q->num,&q->score);
        printf("\n");
        p=q;
        p=p->next;
        p->next=NULL;
        free(q);

    }
    free(p);
    return stu;

}


//输出函数
void print(student * stu)
{
  
    student *p;
    p=stu->next;
   
    for(i=1;(i<=4)&&(p->next);i++,p=p->next)
    {
        p=(student *)malloc(sizeof(student));
        printf("第%d个学生的信息:姓名%5c  学号%5d 分数%5d\n",i,p->name,p->num,p->score);
        free(p);
    }
}

//查找函数
void find(student * stu)
{
    int n;student *p;
    printf("按学号查找!\n");
   
    p=stu->next;
    p=(student *)malloc(sizeof(student));
    printf("查找的学号:");
    scanf("%d",&n);
    for(;p->next;p=p->next)
    {
        if(p->num==n)
        {  
            printf("查找成功\n");
            printf("此学生的信息:姓名%5c  学号%5d 分数%5d\n",p->name,p->num,p->score);
        }

    }
    if(p==NULL)
        printf("无此学生!!!\n");
    free(p);
}

//插入函数
student * insert(student * stu)
{

    student *p,*q;
    p=stu->next;
    p=q=(student *)malloc(sizeof(student));
    printf("输入插入学生的信息 姓名 学号 分数\n");
    scanf("%c%d%d",&q->name,&q->num,&q->score);
    for(;p->next;p=p->next);
    p->next=q;
    p=p->next;
    q->next=NULL;
    return stu;

}

//删除函数
student *del(student * stu)
{
    student *p,*q,*r;
    int n;scanf("%d",&n);
    p=stu->next;
    p=q=r=(student *)malloc(sizeof(student));
    printf("输入删除学生的姓名\n");
    scanf("%c%d%d",&q->name);
    for(;p->next;p=p->next)
    {
        if(p->num==n)
        {  
            printf("此学生的信息:姓名%5c  学号%5d 分数%5d\n",p->name,p->num,p->score);
            r=q->next;
            q->next=r->next;
        }
        q=p;

    }
    if(p==NULL)
        printf("无此学生!!!\n");
    return stu;
}



int main(int argc, char* argv[])
{
    student *stu;int choice,flag=1;
    stu=(student*)malloc(N*sizeof(student));
    stu->next=NULL;
   
    do{
   
        printf("1:输入 姓名 学号 分数 名次\n 2:输出\n 3:查找\n 4:插入\n 5:删除\n");
        scanf("%d",&choice);
        switch(choice){

      
           case 1:stu=initial(stu);
               break;
      
           case 2:print(stu);
               break;
      
           case 3:find(stu);
               break;
      
           case 4:stu=insert(stu);
               break;
      
           case 5:stu=del(stu);
               break;
            printf("是否继续 1:是    0:否\n");
            scanf("%d",&flag);

        }
    }while(flag);
    printf("Hello World!\n");
    return 0;
}
是搞出来了但是 运行有问题

Discuz!  
好好学习  天天向上
2010-04-25 23:16
NOMIPS
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:86
专家分:537
注 册:2010-3-31
收藏
得分:0 
楼主的程序太多问题了,终于整了出来,勉强能用,还需要优化的。

验证下。

#include "stdio.h"
#include "stdlib.h"

#define N 4

typedef struct Node
{
    char name[20];  //学生的姓名
    int num;   //学生的学号
    int score;  //学生的分数
    struct Node *next;
}student;


//新建函数
student * initial(student * stu)
{
    student *p;
    stu=p=(student *)malloc(sizeof(student));
    int i=0;
    for(i=1;i<=4;i++)
    {
        printf("第%d个学生的信息:姓名  学号 分数\n",i);
        scanf("%s%d%d",p->name,&p->num,&p->score);
        printf("\n");
        p->next=(student *)malloc(sizeof(student));
        p=p->next;
    }
    p->next=NULL; /*尾节点next指向NULL*/
    return stu;

}


//输出函数
void print(student * stu)
{

    int i=1;
    while(stu->next!=NULL)
    {
        printf("第%d个学生的信息:姓名%s  学号%5d 分数%5d\n",i++,stu->name,stu->num,stu->score);
        stu=stu->next;
    }
}

//查找函数
void find(student * stu)
{
    int n;
    printf("按学号查找!\n");
    printf("查找的学号:");
    scanf("%d",&n);
   while(stu->next!=NULL)
    {
        if(stu->num==n)
        {
            printf("查找成功\n");
            printf("此学生的信息:姓名%s 学号%5d 分数%5d\n",stu->name,stu->num,stu->score);
            break;
        }
        stu=stu->next;
    }
   if (stu->next==NULL)
    printf("无此学生!!!\n");
}

//插入函数
student * insert(student * stu)
{

    student *q;
    q=stu; /*save head node*/
    while(stu->next!=NULL)
    {
        stu=stu->next;
    }
    stu->next=(student *)malloc(sizeof(student));
    printf("输入插入学生的信息 姓名 学号 分数\n");
    scanf("%s%d%d",stu->name,&stu->num,&stu->score);
    stu->next->next=NULL;
    stu=q/*return to head*/;
    return stu;

}

//删除函数
student *del(student * stu)
{
    student *p,*q;
    int n,i=0;
    q=p=stu;
    printf("输入删除学生的学号\n");
    scanf("%d",&n);
    while(stu->next!=NULL)
    {
        if(stu->num==n)
        {
            printf("此学生的信息:姓名%s  学号%5d 分数%5d\n",stu->name,stu->num,stu->score);
            break;
        }
     p=stu;
     stu=stu->next;
     i++;
    }
     if(stu->num==n)
     {
     p->next=stu->next;
     free(stu);
     if(i==0)
     stu=p->next;
     else
     stu=q;
     }


    if(stu->next==NULL)
    {
        printf("无此学生!!!\n");
        stu=q;
    }

    return stu;
}



int main(int argc, char* argv[])
{
    student *stu;
    int choice,flag=1;
    do{

        printf("1:输入 姓名 学号 分数 名次\n 2:输出\n 3:查找\n 4:插入\n 5:删除\n");
        scanf("%d",&choice);
        switch(choice){


           case 1:stu=initial(stu);
               break;

           case 2:print(stu);
               break;

           case 3:find(stu);
               break;

           case 4:stu=insert(stu);
               break;

           case 5:stu=del(stu);
               break;

        }
            printf("是否继续 1:是    0:否\n");
            scanf("%d",&flag);
    }while(flag);


    printf("Hello World!\n");
    return 0;
}
2010-04-26 11:25
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
收藏
得分:0 
好像问题还没有解决呢
运行的时候还是有错误啊
2010-04-26 20:58
NOMIPS
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:86
专家分:537
注 册:2010-3-31
收藏
得分:0 
我在EditPlus中运行OK,你运行时遇到什么样的错误?
2010-04-26 21:42
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
收藏
得分:0 
回复 6楼 NOMIPS
我用的是VC6.0
运行的时候应该是出现了内存错误
我在内存这方面不是很懂
2010-04-27 10:20
NOMIPS
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:86
专家分:537
注 册:2010-3-31
收藏
得分:13 
xueshengguanliVC.rar (163.57 KB)

student * initial(student * stu)
{
    student *p;
    int i=0;
    stu=p=(student *)malloc(sizeof(student)); /*对调一下位置*/
    for(i=1;i<=4;i++)
    {
        printf("第%d个学生的信息:姓名  学号 分数\n",i);
        scanf("%s%d%d",p->name,&p->num,&p->score);
        printf("\n");
        p->next=(student *)malloc(sizeof(student));
        p=p->next;
    }
    p->next=NULL; /*尾节点next指向NULL*/
    return stu;

}
for VC ,也试过了。OK!
2010-04-27 10:55
快速回复:一个简单的程序 有几处相同的错误 希望各位能帮帮我,感激不尽
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028101 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved