| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 765 人关注过本帖
标题:求助啊 帮忙解决下 我大一急需要马上解决 谢谢
只看楼主 加入收藏
nie228743161
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-12-13
收藏
得分:0 
下面那个第二个自定义函数  我第一个函数我用for循环四次,假如四个学生。。但在第二个函数我怎么来具体调用里面学生的信息;;就是第二个fscanf和fprintf怎么用。。我最想达到的目标是 我第二次只要一输入学生学号就能知道那个人所以的成绩 但是我设计不来,,怎么来设计呢??希望你能指点指点。。谢谢
2012-12-13 21:14
nie228743161
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-12-13
收藏
得分:0 
我的意思是 我第一个自定义函数  我FOR循环几次假如输入几个学生成绩,但在第二个自定义函数我调用不来,第二个函数fscanf和fprintf我不知道怎么改。。还有我最想实现的是我只要一输入学生学号就能得到他的所以信息,,但是我设计不出来,,你帮办 帮帮我改改这个程序。。谢谢啊,,,
2012-12-13 21:17
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
差不多了,应该没什么问题了,再控制一下文件里浮点型的格式就行了,看看吧,运行运行

#include<stdio.h>
#include<stdlib.h>
FILE *fp;

struct
{
    int num;
    char name[20];
    float score[3];
    float sum;
}stu[20];

void input(void);
void search(void);

int main(void)
{
    int n;
    printf("您已经进入了学生信息系统\n");
    do
    {
        printf("1 学生信息录入\n");
        printf("2 学生信息查询\n");
        printf("0 退出\n");
        printf("输入编号:");
        scanf("%d", &n);
        switch(n)
        {
            case 1:input();break;
            case 2:search();break;
            case 0:break;
            default:printf("您输入的选项有误!\n");
        }
    }while(n!=0);
    printf("您已经退出了学生信息系统\n");
    return 0;
}
void input(void)
{
    int i;
    if((fp=fopen("filename.txt", "w")) == NULL)
    {
    printf ("打开文件失败!\n");
    exit(0);
    }
    printf("请输入学生信息:\n");
    for(i=0;i<4;i++)
    {
        printf("学生%d\n",i+1);
        printf("学号:");  scanf("%d",&stu[i].num);
        printf("姓名:");  scanf("%s",stu[i].name);
        printf("语文:");  scanf("%f",&stu[i].score[0]);
        printf("数学:");  scanf("%f",&stu[i].score[1]);
        printf("英语:");  scanf("%f",&stu[i].score[2]);
        stu[i].sum=(stu[i].score[0] + stu[i].score[1] +stu[i].score[2])/3;
        fprintf(fp,"%-03d  %-10s  %-03.6f  %-03.6f  %-03.6f  %-03.6f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
    }
    fclose(fp);
}
void search(void)
{
    int num,i;
    if((fp=fopen("filename.txt","r"))==NULL)
    {
        printf("不能打开");
        exit(0);
    }
    while(1)
    {
        i=0;
        printf("请输入学生学号(输入0退出):");
        scanf("%d",&num);
        if(num==0)    break;
        while(!feof(fp))
        {
            fscanf(fp,"%d  %10s  %f  %f  %f  %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
            if(num == stu[i].num)
            {
                printf("学号 姓名 语文 数学 英语 总分\n");
                printf("%-d  %-s  %-f  %-f  %-f  %-f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
                fclose(fp);
                return;
            }
            i++;
        }
        fseek(fp,0,0);
        printf ("没有该学生的信息!\n");
        printf("请重新输入:\n");
    }
}

[ 本帖最后由 小小战士 于 2012-12-14 11:54 编辑 ]

小小战士,战士中的战斗机!
2012-12-13 22:59
nie228743161
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-12-13
收藏
得分:0 
谢谢哈,你编程格式很整齐啊,不错,我用的codeblocks里面没有那个自动对齐快捷键,不方便,我刚学也没注意对齐,你是用的什么软件编的,还问你一下,就是我查询学生的信息,可不可以直接输入学生的学号就能得到学生的相关信息,像上面这个search函数还是要一次fscanf才能最终显示,如果就输入函数是不是要用指针的内容呢???
2012-12-14 08:09
nie228743161
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-12-13
收藏
得分:0 
fscanf(fp,"%d  %10s  %f  %f  %f  %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
            if(num == stu[i].num)
            {
                printf("学号 姓名 语文 数学 英语 总分\n");
                printf("%-d  %-s  %-f  %-f  %-f  %-f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
                i++;
                k=1;
                return;
            }


这一段我始终没有理解到,fscanf是表示读取文件中的相关项目,这个我知道了,还有就是为什么stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);这些项目中的i必须要初始化化为1,我自己式了不把i初始化,这程序又有问题,,这样的话stu[0]不就表示第一个学生的信息吗???还有 i++也没看懂。。但是这个程序运行的却达到了我预想的目标。。。。。,麻烦你下,我现在大一才学,自己理解有限。。希望帮我解答下,,谢谢你啊
2012-12-14 08:49
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
以下是引用nie228743161在2012-12-14 08:09:59的发言:

谢谢哈,你编程格式很整齐啊,不错,我用的codeblocks里面没有那个自动对齐快捷键,不方便,我刚学也没注意对齐,你是用的什么软件编的,还问你一下,就是我查询学生的信息,可不可以直接输入学生的学号就能得到学生的相关信息,像上面这个search函数还是要一次fscanf才能最终显示,如果就输入函数是不是要用指针的内容呢???


有些软件是有自动对齐功能,但主要还是靠自己,我主要用的是fedora9,但也用BV6.0和DEV c++5
上面的方法就是直接输入学生的学好来查询的,还有一种办法就是用链表保存所有学生的信息,达到一次导入随时查询的目的,就用到指针和结构体了

小小战士,战士中的战斗机!
2012-12-14 10:03
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
以下是引用nie228743161在2012-12-14 08:49:50的发言:

fscanf(fp,"%d  %10s  %f  %f  %f  %f",&stu.num,stu.name,&stu.score[0],&stu.score[1],&stu.score[2],&stu.sum);
            if(num == stu.num)
            {
                printf("学号 姓名 语文 数学 英语 总分\n");
                printf("%-d  %-s  %-f  %-f  %-f  %-f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.sum);
                i++;
                k=1;
                return;
            }


这一段我始终没有理解到,fscanf是表示读取文件中的相关项目,这个我知道了,还有就是为什么stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.sum);这些项目中的i必须要初始化化为1,我自己式了不把i初始化,这程序又有问题,,这样的话stu[0]不就表示第一个学生的信息吗???还有 i++也没看懂。。但是这个程序运行的却达到了我预想的目标。。。。。,麻烦你下,我现在大一才学,自己理解有限。。希望帮我解答下,,谢谢你啊


哪里把i初始化为1了?初始化为0了,看上面的定义i=0;
可能i++的内容你还没学吧?看看书,实现这个管理系统是用到了c的大部分的知识,别着急,慢慢学

小小战士,战士中的战斗机!
2012-12-14 10:07
nie228743161
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2012-12-13
收藏
得分:0 
谢谢你,真想加你为好友啊,,,我现在学这些东西,老师就照着课件教,她很少有实际的操作给我们看。。。能加你QQ吗?  希望你能有时间在我程序不懂些的地方教教我,不会经常打扰你的。。我的是228743161 ,,,加你QQ行吗
2012-12-14 10:17
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>

struct
{
    int num;
    char name[20];
    float score[3];
    float sum;
}stu[20];

void input(void);
void search(void);

int main(void)
{
    int n;
    printf("您已经进入了学生查询系统\n");
    do
    {
        printf("1 学生信息录入\n");
        printf("2 学生信息查询\n");
        printf("0 退出\n");
        printf("输入编号:");
        scanf("%d", &n);
        switch(n)
        {
            case 1:input();break;
            case 2:search();break;
            case 0:break;
            default:printf("您输入的选项有误!\n");
        }
    }while(n!=0);
    return 0;
}
void input(void)
{
    int i;
    FILE *fp;
    if((fp=fopen("filename.txt", "w")) == NULL)
    {
        printf ("打开文件失败!\n");
        exit(0);
    }
    printf("请输入学生信息:\n");
    for(i=0;i<4;i++)
    {
        printf("学生%d\n",i+1);
        printf("学号:");  scanf("%d",&stu[i].num);
        printf("姓名:");  scanf("%s",stu[i].name);
        printf("语文:");  scanf("%f",&stu[i].score[0]);
        printf("数学:");  scanf("%f",&stu[i].score[1]);
        printf("英语:");  scanf("%f",&stu[i].score[2]);
        stu[i].sum=(stu[i].score[0] + stu[i].score[1] +stu[i].score[2])/3;
        fprintf(fp,"%-03d  %-10s  %-03.6f  %-03.6f  %-03.6f  %-03.6f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
    }
    fclose(fp);
}
void search(void)
{
    int num;
    FILE *fp;
    int stu_num;
    char stu_name[20];
    float stu_score[3];
    float stu_sum;
    if((fp=fopen("filename.txt","r"))==NULL)
    {
        printf("不能打开");
        exit(0);
    }
    while(1)
    {
        printf("请输入学生学号(输入0退出):");
        scanf("%d",&num);
        if(num==0)    break;
        while(!feof(fp))
        {
            fscanf(fp,"%d  %10s  %f  %f  %f  %f",&stu_num,stu_name,&stu_score[0],&stu_score[1],&stu_score[2],&stu_sum);
            if(num == stu_num)
            {
                printf("学号 姓名 语文 数学 英语 总分\n");
                printf("%-d  %-s  %-f  %-f  %-f  %-f\n",stu_num,stu_name,stu_score[0],stu_score[1],stu_score[2],stu_sum);
                fclose(fp);
                return;
            }
        }
        fseek(fp,0,0);
        printf ("没有该学生的信息!\n");
        printf("请重新输入:\n");
    }
}

[ 本帖最后由 小小战士 于 2012-12-14 12:37 编辑 ]

小小战士,战士中的战斗机!
2012-12-14 12:36
快速回复:求助啊 帮忙解决下 我大一急需要马上解决 谢谢
数据加载中...
 
   



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

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