标题:求助,请各位帮忙找下错误,和指点一下思路
只看楼主
路边的石子5
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-9
 问题点数:0 回复次数:5 
求助,请各位帮忙找下错误,和指点一下思路
我想写一个学生信息管理系统,下面是我试验性的一个程序,编译是能通过的,写入学生信息也没有问题。但进行成绩查询就出现了问题
,从运行结果看程序是能找到这个成绩的
但他的输出结果不对。最后的删除也有问题,应该和前面的问题是一样的。
我实在是看不明白,所以来求助一下。各路英雄好汉帮帮忙;指点下迷津。拜托了





#include<stdio.h>
#include<string.h>


#define N 3



void A();
void B();
void C();
struct stu{
    char name[16];
    int num;
}sta[N];

int main()
{
    int x;
    printf("       学生查            \n");
    printf("\n输入1写入学生信息         ");
    printf("\n输入2进行学生查询        ");
    printf("\n输入3删除学生成绩        ");
    printf("\n***********************\n");
    scanf("%d",&x);
    switch(x)
    {
        case 1: A();   break;
        case 2: B();   break;
        case 3: C();   break;
        default: break;
    }
   
}


void A()
{
    FILE *fp;int i;
    if((fp=fopen("xueshen.txt","w"))==NULL)
    {
        printf("打开失败!!!");  return;
    }
    for(i=0;i<N;i++)
    {
        printf("输入名字:");
        scanf("%s",sta[i].name );
        printf("输入成绩:");
        scanf("%s",&sta[i].num );
    }
    for(i=0;i<N;i++)
        fwrite(&sta[i],sizeof( struct stu),1,fp);
    fclose(fp);
    return ;
}


void B()
{
    FILE *fp; int i,x;
    if((fp=fopen("xueshen.txt","r+"))==NULL)
    {
        printf("失败!!");
        return ;
    }
    for(i=0;i<N;i++)
        fread(&sta[i],sizeof( struct stu),1,fp);
    printf("输入要查询的成绩:");
    scanf("%d",&x);
    for(i=0;i<N;i++)
        if(sta[i].num == x  );
        {
            printf("名字是%s:\n",sta[i].name );
            printf("成绩是%d",sta[i].num );
         }
    fclose(fp);
    return ;        
}

void C()
{
    FILE *fp;
    int i,m,j,x,y;
    char ch[2];
    if((fp=fopen("xueshen.txt","r+"))==NULL)
    {
        printf("失败!!");
        return ;
    }
    for(i=0;i<N;i++)
    {
        fread(&sta[i],sizeof( struct stu),1,fp);
        m++;
    }
        
    printf("输入要删除的成绩:");
    scanf("%d",&x);
    for(i=0;i<N;i++)
        if(sta[i].num == x  );
        {
            printf("名字是%s:",sta[i].name );
            printf("成绩是%d",sta[i].num );
            y=i;
         }
    fclose(fp);
    printf("是否删除?请输入'Y'");
    scanf("%s",ch);
    if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
    for(j=y;j<N;j++)
    {
        sta[j]=sta[j+1];
        m--;
    }
    for(j=0;j<m;j++)
        if(fwrite(&sta[j],sizeof( struct stu),1,fp)!=1)
        {
            printf("失败!!!");
        }   
}
搜索更多相关主题的帖子: 管理系统 include 英雄好汉 成绩查询 
2015-12-12 14:55
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:0 
if(sta[i].num == x  );   <----目测多了个分号,压根就木有查找到。改了再试

将for循环用大括号包住你的条件语句

[此贴子已经被作者于2015-12-12 15:28编辑过]

2015-12-12 15:26
路边的石子5
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-9
得分:0 
回复 2楼 newdos
还是不行........
2015-12-12 21:29
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:0 
printf("输入成绩:");
 scanf("%s",&sta[i].num ); //这句改成scanf("%d", &sta[i].num );
 还有上面的说的要括起来,要不fclose在B()函数里会多次调用,就可以了。
2015-12-12 23:56
路边的石子5
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-9
得分:0 
回复 4楼 newdos
这我发现了,但改了之后又有其他问题了
2015-12-13 12:31
路边的石子5
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-9
得分:0 
回复 4楼 newdos
O(∩_∩)O谢谢;我已经弄好了,除了你说的错误,还有错误就是对文件的操作不熟,所以一直没有预想的结果
2015-12-13 14:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-460158-1-1.html




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

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