超兽武装之少主天羽:c语言 问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/30 12:39:39
我编了个评定奖学金的程序.在编译时正常,但运行后不能输入长整型和实型.且屏幕显示:Null pointer assignment 请各位大虾帮忙看看,程序如下:
#include <math.h>
#include <string.h>
#include <stdio.h>

struct achievement
{
float kaoshi[5];
float kaocha[5];
float P_E;
float sum_score;
};/*存放学生成绩*/

struct student
{
char name[10];
long num;
char win;
char punish;
struct achievement score;
}student[50];/*存放学生信息*/
struct student *p1;

struct student_list
{
char name[10];
long num;
float sum_score;
}student_list[50];/*存放满足奖学金条件的学生信息*/
struct student_list *p2;

struct count
{
float kaoshi;
float ave_kaoshi;
float kaocha;
float ave_kaocha;
}count[50];/*存放学生考试(查)课总分和平均分*/
struct count *p3;
struct result
{
int first;
int second;
int third;
int other;
}result={0,0,0,0};/*存放获得各等级奖学金人数*/
struct result *p4;
int n1,n2,n3,n4=0;
int input();
int count1();
int run();
int result1();

main()
{
sqrt(1.0);
input();/*用来输入学生信息*/
count1();/*用来计算学生考试(查)课平均分*/
run();/*用来计算学生按评分标准算时的分数*/
result1();/*输出结果*/
}

input()
{
int i,j,k;
printf("\nplease input numbers of students and amount of kaoshi & kaocha ke:\n");
scanf("%d%d%d",&n1,&n2,&n3);
printf("\nplease input information of students(name num win punish):\n");
for(p1=student,i=0;i<n1;p1++,i++)
{
printf("number %d:\n",i+1);
scanf("%s%ld",(*p1).name,(*p1).num);
getchar();
(*p1).win=getchar();
getchar();
(*p1).punish=getchar();
printf("\nplease input achievement of kaoshi ke(%d ke):\n",n2);
for(j=0;j<n2;j++)
scanf("%f",(*p1).score.kaoshi[j]);
printf("\nplease input achievement of kaocha ke(%d ke):\n",n3);
for(k=0;k<n3;k++)
scanf("%f",(*p1).score.kaocha[k]);
printf("\nplease input achievement of P_E:\n");
scanf("%f",(*p1).score.P_E);
}
}
谢谢了‘我已经找到问题了‘‘谢谢‘!!

结构体与函数体某些变量类型不匹配所致
比如:char punish 而在函数中你却使用ld来读取字符型数据。
还有几处,仔细找找吧

另外,在如下这处:
(*p1).win=getchar();
getchar();
(*p1).punish=getchar();
应当指明输入方式,一面其他用户误操作造成指针指向错误……