| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 633 人关注过本帖
标题:新手求助,指针结构体程序中断
只看楼主 加入收藏
Muhu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-10-27
结帖率:0
收藏
已结贴  问题点数:10 回复次数:3 
新手求助,指针结构体程序中断
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

struct student{
    long ID;
    char name[20];
    float score;
}stu[15];
struct student *p;


//函数原型声明
void get(struct student *p,int N,int i);
void print(struct student *p,int N,int i);
void search_name(int N);
void sort_ID(struct student *p,int N);
void sort_score(struct student *p,int N);
void sort_name(struct student *p,int N);

//主函数
void main(){
    int N,i=0;
    printf("Please enter the number of students(5~15):");
    scanf("%d",&N);
    printf("\n");
    //子函数
    get(p,N,i);//输入
    p=stu;
    print(p,N,i);
    p=stu;
    search_name(N);//按姓名查询
    sort_ID(p,N);//按学号排序
    print(p,N,i);
    p=stu;
    sort_score(p,N);//按成绩排序
    print(p,N,i);
    p=stu;
    sort_name(p,N);//按姓名排序
    print(p,N,i);
    p=stu;
    getch();
}

void get(struct student *p,int N,int i){
    p=stu;
    for(i;i<N;i++){
        printf("NO.%d:Please enter the student's ID:\t",i+1);
        scanf("%ld",&((p+i)->ID));
        fflush(stdin);
        printf("     Please enter the student's name:\t");
        scanf("%s",&((p+i)->name));
        fflush(stdin);
        printf("     Please enter the student's score:\t");
        scanf("%f",&((p+i)->score));
        fflush(stdin);
    }
}

void print(struct student *p,int N,int i){
        printf("               The Score List\n");
        printf("NO.    ID         Name        Score\n");
        for(i;i<N;i++){
            printf("%-6d%-12d%-20s%-6f\n",i+1,(p+i)->ID,(p+i)->name,(p+i)->score);
        }
}

void search_name(int N){
    int i,count=0;
    char name[20];
    printf("Please enter the name you want to find:");
    scanf("%s",name);
    printf("\n");
    for (i=0;i<N;i++){
        if (strcmp(name,(p+i)->name) == 0){
            printf("ID         Name        Score\n");
            printf("%-6d%-12d%-6f\n",i+1,(p+i)->ID,(p+i)->score);
            count++;
        }
    }
    if(count==0)
        printf("This guy is not exsist!\r\n");
}

void sort_ID(struct student *p,int N){
    struct student *pt;
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N-i;j++){
            if((p+j)->ID>(p+j+1)->ID){
                *pt=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=*pt;
            }
        }
    }
}

void sort_score(struct student *p,int N){
    struct student *pt;
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N-i;j++){
            if((p+j)->score>(p+j+1)->score){
                *pt=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=*pt;
            }
        }
    }
}

void sort_name(struct student *p,int N){
    struct student *pt;
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N-i;j++){
            if(strcmp((p+j)->name,(p+j+1)->name)>0){
                *pt=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=*pt;
            }
        }
    }
}
经过了断点测试,问题就是出在这三个函数中
void sort_ID(struct student *p,int N);
void sort_score(struct student *p,int N);
void sort_name(struct student *p,int N);
可是不会改啊……
搜索更多相关主题的帖子: 声明 include number 结构体 
2011-11-07 15:22
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:3 
结构体不能直接用"="整体赋值,可以尝试用内存拷贝

总有那身价贱的人给作业贴回复完整的代码
2011-11-07 15:52
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:3 
pt 你定义的是一个结构体指针,可没你没有给他赋初值,也就是他的指向是不确定的。还有就是ID类型是long,数据输入输出都应用l进行说明。
2011-11-07 16:13
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>//加入头文件

struct student{
    long ID;
    char name[20];
    float score;
}stu[15];
struct student *p;


//函数原型声明
void get(struct student *p,int *N);
void print(struct student *p,int N);
void search_name(int N);
void sort_ID(struct student *p,int N);
void sort_score(struct student *p,int N);
void sort_name(struct student *p,int N);

//主函数
void main(){
    int N=0;
    printf("Please enter the number of students(5~15):\n");

 //   scanf("%d",&N);
  //  printf("\n");
    //子函数
    p=stu;
    get(p,&N);//输入//改N为地址参数&N用来返回结构体实际长度(即学生记录个数)
    print(p,N);
    //p=stu;
    search_name(N);//按姓名查询
    sort_ID(p,N);//按学号排序
    print(p,N);
   // p=stu;
    sort_score(p,N);//按成绩排序
    print(p,N);
   // p=stu;
    sort_name(p,N);//按姓名排序
    print(p,N);
   // p=stu;
    getch();
}

void get(struct student *p,int *n)//去掉int i没有什么用
{
  // p=stu;
    int i=0;
    while(1)
    {
        printf("是否继续输入?继续请按回车键;退出请输入'N'或者'n'\n");
        if(tolower(getchar()) == 'n')
        {   
            fflush(stdin);
            break;
        }
        else
        {
            printf("NO.%d:Please enter the student's ID:\t",i+1);
            scanf("%ld",&((p+i)->ID));
            fflush(stdin);
            printf("     Please enter the student's name:\t");
            scanf("%s",(p+i)->name);//字符串输入格式不对改为sanf("%s",(p+i)->name);
            fflush(stdin);
            printf("     Please enter the student's score:\t");
            scanf("%f",&((p+i)->score));
            fflush(stdin);
            (*n)++;//记录输入学生个数返回给主函数
            i++;
        }
    }
}

void print(struct student *p,int N)//去掉int i没有什么用
{
        int i = 0;
        printf("               The Score List\n");
        printf("NO.    ID         Name        Score\n");
        for(i;i<N;i++){
            printf("%-6d%-12d%-20s%-6f\n",i+1,(p+i)->ID,(p+i)->name,(p+i)->score);
        }
}

void search_name(int N){
    int i,count=0;
    char name[20];
    printf("Please enter the name you want to find:");
    scanf("%s",name);
    printf("\n");
    for (i=0;i<N;i++){
        if (strcmp(name,(p+i)->name) == 0){
            printf("ID         Name        Score\n");
            printf("%-6d%-12d%-6f\n",i+1,(p+i)->ID,(p+i)->score);
            count++;
        }
    }
    if(count==0)
        printf("This guy is not exsist!\r\n");
}

void sort_ID(struct student *p,int N){
    struct student pt;//定义为结构体变量时系统会分配内存,如果定义为指针变量系统只分配指针内存不会分配结构体所需的内存,除非用动态分配一块内存并把地址赋值给该指针)
    int i,j;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N-i;j++)
        {
            if(((p+j)->ID)>((p+j+1)->ID)){
                pt=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=pt;
            }
        }
    }
}

void sort_score(struct student *p,int N){
    struct student pt;//同上
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N-i;j++){
            if((p+j)->score>(p+j+1)->score){
                pt=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=pt;
            }
        }
    }
}

void sort_name(struct student *p,int N){
    struct student pt;//同上
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N-i;j++){
            if(strcmp((p+j)->name,(p+j+1)->name)>0){
                pt=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=pt;
            }
        }
    }
}


[ 本帖最后由 liao06550107 于 2011-11-7 17:47 编辑 ]

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2011-11-07 17:07
快速回复:新手求助,指针结构体程序中断
数据加载中...
 
   



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

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