| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1592 人关注过本帖
标题:测试代码时发现问题,思考了很久仍然无法解决,请各位帮忙
只看楼主 加入收藏
丶随风飘扬
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2019-11-1
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:4 
测试代码时发现问题,思考了很久仍然无法解决,请各位帮忙
运行结果截图如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

为什么我输入了学号后就无法再运行下去了?
这是我的测试代码:
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define  maxsize 100
#define newnode (node*)malloc(sizeof(node*))
typedef struct k
{
    char name[maxsize];         //姓名
    int    xuehao;              //学号
    int age;                    //年龄
    char sex[maxsize];         //性别
    char birth[maxsize];       //出生日期
    int     number;             //电话号码
    struct k *next;
}node;
int xh;//用来储存学号的中间变量
void meun()//菜单显示界面
{
    printf("********************************************************\n");
    printf("**************欢迎使用学生信息管理系统*****************\n");
    printf("*****************请选择您的操作************************\n");
    printf("                  1.浏览学生信息                   \n");
    printf("                  2.增加学生信息                  \n");
    printf("                  2.删除学生信息                  \n");
    printf("                  3.修改学生信息                  \n");
    printf("                  4.查找学生的信息                \n");
    printf("                  0.退出系统                      \n");
    printf("********************************************************\n");
}
void insert(node *h)//增加学生信息
{
    node *p,*tail;  //分别指向新建结点和尾结点
    node *s,*pre;//用来查找链表尾结点的中间结点
    node *q;    //用来检测是否存在相同学号的中间结点
    s=h->next;
    while(s!=NULL)  //找到链表的尾结点
    {
        pre=s;
        s=s->next;
    }
    tail=pre;
    q=h->next;
    int i,j;
    printf("请输入您要添加的学生人数:\n");
    scanf("%d",&i);
    for(j=0;j<i;j++)
    {
        printf("请输入学生学号:\n");
        scanf("%d",xh);
        while(q!=NULL)//判断是否有相同学号的学生存在
        {
            if(q->xuehao==xh)
            {
                printf("该名学生已存在!");
                break;
            }
            q=q->next;
        }
        if(q==NULL)//此时已不存在相同学号的学生
        {
            p=newnode;
            p->next=NULL;
            printf("请分别输入学生的姓名、学号、年龄、性别、电话号码、出生日期:\n");
            scanf("%s  %d  %d  %s  %d  %s",p->name,&p->xuehao,&p->age,p->sex,&p->number,p->birth);
            tail->next=p;tail=p;
        }
        q=h->next;
    }
}
void print(node *h)//打印学生信息
{
    node *p=h->next;
    printf("\n姓名      性别      学号      年龄      出生日期      电话号码:\n");
    while(p!=NULL)
    {
    printf("%s      %s      %d      %d      %s      %d\n",p->name,p->sex,p->xuehao,p->age,p->birth,p->number);
    p=p->next;
    }
}
int main()
{
    node *h;
    h=newnode;h->next=NULL;
    insert(h);
    print(h);
}
搜索更多相关主题的帖子: 学生 printf node next 学号 
2020-05-19 22:32
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:3 
//scanf("%d",xh);
scanf("%d",&xh);
2020-05-20 05:21
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1694
专家分:4282
注 册:2007-12-27
收藏
得分:3 
#define newnode (node*)malloc(sizeof(node*))
should be
#define newnode (node*)malloc(sizeof(node))

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-05-20 10:30
丶随风飘扬
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2019-11-1
收藏
得分:0 
回复 2楼 吹水佬
感谢指点!
我一直以为是逻辑错了呢,没想到是这些小问题,小细节,唉,以后检查代码就应该首先检查这些小问题小细节的。
2020-05-20 12:08
丶随风飘扬
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2019-11-1
收藏
得分:0 
回复 3楼 forever74
感谢指出错误。
这个细节问题光靠自己查找还真很难发现。
2020-05-20 12:11
快速回复:测试代码时发现问题,思考了很久仍然无法解决,请各位帮忙
数据加载中...
 
   



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

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