| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1168 人关注过本帖
标题:编译的程序现在有一个错误和两个警告,且都在一句中,不知如何修改,恳请不 ...
只看楼主 加入收藏
moonchild
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-10-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
编译的程序现在有一个错误和两个警告,且都在一句中,不知如何修改,恳请不吝赐教!!
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>

typedef struct {
    int id;
    char name[10];
    int sex;
    int room;
    int tel;
}StudentInfo;
typedef struct {
    int id;
    char courseNo[10];
    char coursename[20];
    int a;
    int b;
    int c;
    int d;
    double e;
    double f;
}GradeInfo;
StudentInfo si[100];
GradeInfo gi[500];
int sp=0;
int gp=0;

void ReadFile()
{
    FILE *fp;
    fp=fopen("d:\\student.txt","r");
    while (!feof(fp))
    {
        fscanf(fp,"%d%s%d%d%d",&si[sp].id,&si[sp].name,&si[sp].sex,&si[sp].tel);
        sp++;
    }
    fclose(fp);
    fp=fopen("score.dat","r");
    while (!feof(fp))
    {
        fscanf(fp,"%d%s%s%d%d%d%d",&gi[gp].id,&gi[gp].courseNo,&gi[gp].coursename,&gi[gp].a,&gi[gp].b,&gi[gp].c,&gi[gp].d);
    if (gi[gp].c==-1)
        gi[gp].e = 0.3*gi[gp].b+0.7*gi[gp].d;
    else
        gi[gp].e = 0.15*gi[gp].b+0.15*gi[gp].c+0.7*gi[gp].d;
        if ( gi[gp].e >= 80. )
                 gi[gp].f = gi[gp].a *0.8;
        else if ( gi[gp].e >= 70. )
                 gi[gp].f = gi[gp].a *0.75;
        else if ( gi[gp].e >= 60. )
                 gi[gp].f = gi[gp].a *0.6;
        else gi[gp].f = 0;
        gp++;
    }
fclose(fp);
}
void DisplayMainMenu()
{
printf (" 1)  学生信息录入 \n2)    学生信息查询 \n3)    学生数据删除 \n4)    学生成绩排序 \n5)    程序结束 \n ");
}

void DataInput()
{
    printf ("学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩\n");
    fscanf(fp,"%d%s%s%d%d%d%d",&gi[gp].id,&gi[gp].courseNo,&gi[gp].coursename,&gi[gp].a,&gi[gp].b,&gi[gp].c,&gi[gp].d);
    if (gi[gp].c==-1)
gi[gp].e=0.3*gi[gp].b+0.7*gi[gp].d;
    else
gi[gp].e=0.15*gi[gp].b+0.15*gi[gp].c+0.7*gi[gp].d;
    if (gi[gp].e >=90) gi[gp].f=gi[gp].a*1.;
    else if (gi[gp].e>=80)
gi[gp].f=gi[gp].a *0.8;
    else if (gi[gp].e>=70)
gi[gp].f=gi[gp].a*0.75;
    else if ( gi[gp].e>=60)
gi[gp].f=gi[gp].a*0.6;
    else gi[gp].f=0;
    gp++;
}
void QueryById();
void QueryByRoom();
void QueryGrade();
void DataQuery()
{
    int x,y;
    printf(" 1) 学生基本情况查询\n2) 成绩查询\n");
    scanf("%d",&x);
    if (x==1) // 查询学生信息
    {
        printf("1) 按学号查询 2)按宿舍查询\n");
        scanf("%d",&x);
        if (x==1)  
{
printf(" 输入学号\n");
scanf("%d",&y);
QueryById(y);
}
    if (x==2)
{  
printf(" 输入宿舍号\n");
scanf("%d",&y);
QueryByRoom(y);
}
    }
if   (x==2)  // 查询成绩信息
{
printf (" 输入学号\n");
scanf ("%d",&y);
QueryGrade(y);
}
}
void DataDelete()
{
    int x;
    int d=0;
    int k;
    int i=0;
    printf("输入学号\n");
    scanf("%d",&x);
    while(si[i].id!=x) i++;
    if (i<sp-1)
    {    for (k=i;k<sp-1; k++)
        {
            si[k] = si[k+1];    // 删除一个数据后,其他数据前移
        }
    }
    if (i<sp) sp--;
// 成绩数组中,有多个相同的学号,都要删除,并且后面的数据需要前移
    for (k=0;k<gp;k++)
    {
        if (gi[gp].id==x) d++;
        else gi[k-d]=gi[k];
}
gp=gp-d;
}
void QueryById(int x)
{
    int i;
    for (i=0;i<sp;i++)
    {
        if (si[i].id==x)
        {
            printf ("\n    学号    姓名    性别    宿舍号码    电话号码\n");
            printf ("    %d     %s     %s       %d             %d\n",si[i].id,si[i].name,si[i].sex,si[i].room,si[i].tel);
        }
    }
   
}
void QueryByRoom(int x)
{
    int i;
    for (i=0;i<sp;i++)
    {
        if (si[i].room==x)
        {
            printf ("\n    学号    姓名    性别    宿舍号码    电话号码\n");
            printf ("    %d        %s          %s    %d             %d\n",si[i].id,si[i].name,si[i].sex,si[i].room,si[i].tel);
        }
    }
}
void QueryGrade(int x)
{
    int i;
    int sc=0;
    double sg=0;
    for (i=0;i<gp;i++)
    {
        if (gi[i].id==x)
        {
            sc++;
            sg+=gi[i].f;
            printf("\n    学号    课程编号    课程名称    学分    平时成绩    实验成绩    卷面成绩    综合成绩    实得学分\n");
            printf("    %d         %s             %s             %f         %f             %f             %f            %f             %f\n",gi[i].id,gi[i].courseNo,gi[i].coursename,gi[i].a,gi[i].b,gi[i].c,gi[i].d,gi[i].e,gi[i].f);
        }
    }
    printf ("共修:%d科,实得总分为:%f\n",sc,sg);
}
void sort1();
void sort2();
void DataSort()
{
    int x;
    printf ("    1)    综合成绩排序\n    2)    实际学分排序\n");
    scanf("%d",&x);
    if (x==1) sort1();
    if (x==2) sort2();
}
void gradeput();
void sort1()
{
    int i,j;
    GradeInfo t;
    for (i=gp-1;i>=1;i--)
    {
        for (j=0;j<i;j++)
        {
            if (gi[j].e>gi[j+1].e)   // 如果改为 gi[j].e< gi[j+1].e 则为逆序
            {
                t=gi[j];
                gi[j]=gi[j+1];
                gi[j+1]=t;
            }
        }
    }
    gradeput();
}
void sort2()
{
    int i,j;
    GradeInfo t;
    for (i=gp-1;i>=1;i--)
    {
        for (j=0;j<i;j++)
        {
            if (gi[j].f>gi[j+1].f) // 如果改为 gi[j].f< gi[j+1].f 则为逆序
            {
                t=gi[j];
                gi[j]=gi[j+1];
                gi[j+1]=t;
            }
        }
    }
    gradeput();
}
void gradeput()
{
    int i;
    for(i=0;i<gp;i++)
    {
        printf("\n    学号    课程编号    课程名称    学分    平时成绩    实验成绩    卷面成绩    综合成绩    实得学分\n");
        printf("    %d         %s            %s             %f         %f             %f             %f            %f             %f\n",gi[i].id,gi[i].courseNo,gi[i].coursename,gi[i].a,gi[i].b,gi[i].c,gi[i].d,gi[i].e,gi[i].f);
    }
}
void main()
{
    int x;
    ReadFile();
    while(1)
    {
        DisplayMainMenu();
        scanf("%d",&x);
        switch (x)
        {
        case 1: DataInput();break;
        case 2: DataQuery();break;
        case 3: DataDelete();break;
        case 4: DataSort();break;
        case 5: exit (0);
        }
    }
}
搜索更多相关主题的帖子: 如何 include double while 
2011-10-26 19:43
moonchild
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-10-25
收藏
得分:0 
错误信息是
F:\学生信息管理系统.c(66) : error C2065: 'fp' : undeclared identifier
F:\学生信息管理系统.c(66) : warning C4047: 'function' : 'struct _iobuf *' differs in levels of indirection from 'int '
F:\学生信息管理系统.c(66) : warning C4024: 'fscanf' : different types for formal and actual parameter 1
执行 cl.exe 时出错.
2011-10-26 19:44
GeBron
Rank: 2
等 级:论坛游民
帖 子:23
专家分:33
注 册:2011-4-14
收藏
得分:3 
程序代码:
void DataInput()
{
    FILE *fp;   //这里需添上
    printf ("学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩\n");
    fscanf(fp,"%d%s%s%d%d%d%d",&gi[gp].
这样能编译过去,但程序貌似还有别的错误。
2011-10-26 21:49
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:3 
指针fp没有初始化

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-10-26 22:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
英文看不懂就查字典看,不知道看英文,至少知道66是第66行出现问题,这都不动手,不如不学了吧。

授人以渔,不授人以鱼。
2011-10-26 22:41
moonchild
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-10-25
收藏
得分:0 

现在已经改好了,虽然编译没问题,但是调试的时候出现
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
The thread 0xAD8 has exited with code -1073741510 (0xC000013A).
The thread 0xDA4 has exited with code -1073741510 (0xC000013A).
The program 'E:\Debug\学生信息管理系统.exe' has exited with code -1073741510 (0xC000013A).
希望大神帮忙啊,我们只学了一学期c,而且多过去一年了,所以不甚了解,希望大神指导讲解。。。
2011-10-27 09:22
moonchild
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-10-25
收藏
得分:0 
以下是引用moonchild在2011-10-27 09:22:24的发言:

 
现在已经改好了,虽然编译没问题,但是调试的时候出现
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
The thread 0xAD8 has exited with code -1073741510 (0xC000013A).
The thread 0xDA4 has exited with code -1073741510 (0xC000013A).
The program 'E:\Debug\学生信息管理系统.exe' has exited with code -1073741510 (0xC000013A).
希望大神帮忙啊,我们只学了一学期c,而且多过去一年了,所以不甚了解,希望大神指导讲解。。。
现在程序设计实验,老师好不负责任,转一圈就走,所以就求助各位专家了!
2011-10-27 09:37
快速回复:编译的程序现在有一个错误和两个警告,且都在一句中,不知如何修改,恳 ...
数据加载中...
 
   



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

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