| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:文件在提示不能打开的情况下依然可以写入信息??
只看楼主 加入收藏
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
结帖率:96.08%
收藏
已结贴  问题点数:10 回复次数:13 
文件在提示不能打开的情况下依然可以写入信息??
/*
2. 程序设计。
有5 个学生,每个学生有3 门课的成绩,从键盘输入以上数据(包括学号、姓名、3
门课成绩),计算出平均成绩。
(1)将原有数据和计算出的平均分数存放在磁盘文件stud.txt中。在向文件stud.txt
写入数据后,应检查验证stud.txt 文件中的内容是否正确。
(2)将stud.txt 文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入
一个新文件stu_sort.txt 中。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct student
{
    int num;
    char name[20];
    float chinese;
    float math;
    float english;
}stu[5];

float avrmber[5];
int main()
{
    float avr(float a,float b,float c);
    void sort();
    void chenge(int i,int j);
    void print();

    int i;
    FILE *fp;
   
    if(!(fp=fopen("stud.txt","w")))
    {
        exit(0);
    }

    for(i=0;i<5;i++)
    {
        scanf("%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english);
        fprintf(fp,"%d %s %.2f %.2f %.2f %.2f",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avr(stu[i].chinese,stu[i].math,stu[i].english));
        fprintf(fp,"\n");
    }
    fclose(fp);

    fp=fopen("stud.txt","r");
    for(i=0;i<5;i++)
    {
        fscanf(fp,"%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english);
        fscanf(fp,"%f",&avrmber[i]);        
    }
    fclose(fp);

    //核对信息是否正确
    printf("\n\t请核对信息是否正确。\n");
    print();

    sort();
    printf("\n\n\t排序后的内容为:\n");
    print();

    if(!(fp=fopen("stu_sort.txt","w")));
    {
        printf("\n\n\t\t\t文件打开失败!\n");
        exit(0);///////////////////////////////如果这一句注释掉,提示文件打开失败,但是手动查看文件内容,发现已经写入了?这是为什么?????
    }
    for(i=0;i<5;i++)
    {
        fprintf(fp,"%d %s %.2f %.2f %.2f %.2f\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avr(stu[i].chinese,stu[i].math,stu[i].english));
    }
    fclose(fp);

    printf("\n经过排序后的信息已经写入文件。\n\n");

    return 0;
}

float avr(float a,float b,float c)
{
    return (a+b+c)/3;
}

void sort()
{
    int i,j;
    float temp;

    for(i=0;i<4;i++)
    {
        for(j=i+1;j<5;j++)
        {
            if(avrmber[i]<avrmber[j])
            {
                temp=avrmber[i];
                avrmber[i]=avrmber[j];
                avrmber[j]=temp;

                chenge(i,j);
            }

        }

    }

}

void chenge(int i,int j)
{
    int tempd;
    float tempf;
    char tempc[20];

    tempd=stu[i].num;
    stu[i].num=stu[j].num;
    stu[j].num=tempd;

    strcpy(tempc,stu[i].name);
    strcpy(stu[i].name,stu[j].name);
    strcpy(stu[j].name,tempc);

    tempf=stu[i].chinese;
    stu[i].chinese=stu[j].chinese;
    stu[j].chinese=tempf;

    tempf=stu[i].math;
    stu[i].math=stu[j].math;
    stu[j].math=tempf;

    tempf=stu[i].english;
    stu[i].english=stu[j].english;
    stu[j].english=tempf;

}

void print()
{
    int i;

    for(i=0;i<5;i++)
    {
        printf("%d %s %.2f %.2f %.2f %.2f",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avrmber[i]);
        printf("\n");
    }
}


问题写在代码里。。。

搜索更多相关主题的帖子: include 程序设计 信息 键盘 include 程序设计 信息 键盘 姓名 姓名 
2013-06-23 00:48
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:10 
if(!(fp=fopen("stu_sort.txt","w")));
因为多了个分号

总有那身价贱的人给作业贴回复完整的代码
2013-06-23 06:25
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

不想还会在这么低级的错误上给跪了。。。。



学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-23 08:11
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 3楼 蚕头燕尾
总给别人写作业那种代码是不会提升你的综合能力的,试着写点实际应用的项目或者软件,这个过程才能让你的编程能力升华

总有那身价贱的人给作业贴回复完整的代码
2013-06-23 08:21
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 4楼 embed_xuel
我也是这么想的,

可是实际应用的东西感觉C写起来总是力不从心呐。

而且我现在关键不知道所谓的实际应用到底有哪些。。

以至于把我逼到学C#

.net 平台 的东西感觉还有点所谓的“实际应用”的意思

为了用C写底层,我又去学单片机,可以又感觉,还不如用汇编。。

用于是我考虑C写游戏,可是又感觉不如用VB写的快

还想过写算法,可是后来发现在matlab里做个接口比把Matlab学完都困难

你说C能用来写什么。。。实际应用的东西。。。。??

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-23 08:27
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
收藏
得分:0 
没有分号,注释的exit(0);还是会写入的!!
因为fp=fopen("stu_sort.txt","w")这句在文件不存在的时候会创建一个的!
2013-06-23 08:29
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 6楼 YJ_Hao
唔,这个我知道,

我的目的就是为了让它写入文件的

谢谢楼上的回答。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-23 08:36
一明
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2013-6-11
收藏
得分:0 
我看还有些问题,我改写如下:
/*
 2. 程序设计。
 有5 个学生,每个学生有3 门课的成绩,从键盘输入以上数据(包括学号、姓名、3
 门课成绩),计算出平均成绩。
 (1)将原有数据和计算出的平均分数存放在磁盘文件stud.txt中。在向文件stud.txt
 写入数据后,应检查验证stud.txt 文件中的内容是否正确。
 (2)将stud.txt 文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入
 一个新文件stu_sort.txt 中。
 */
 #include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 
struct student
 {
     int num;
     char name[20];
     float chinese;
     float math;
     float english;
 }stu[5];
 
float avrmber[5];
 int main()
 {
     float avr(float a,float b,float c);
     void sort();
     void chenge(int i,int j);
     void print();
 
    int i;
     FILE *fp;
     
    if(!(fp=fopen("stud.txt","w")))
     {
         exit(0);
     }
    printf("请输入学号,姓名,语文成绩,数学成绩,英语成绩:\n");//这些细节可省不了。
    for(i=0;i<5;i++)
     {    printf("第%d位:",i+1);//此处也是。
         scanf("%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english);
         fprintf(fp,"%d %s %.2f %.2f %.2f %.2f",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avr(stu[i].chinese,stu[i].math,stu[i].english));
         fprintf(fp,"\n");
     }
     fclose(fp);
 
    fp=fopen("stud.txt","r");
    printf("输出学号,姓名,语文成绩,数学成绩,英语成绩:\n");
     for(i=0;i<5;i++)
     {
         fscanf(fp,"%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english);
         fscanf(fp,"%f",&avrmber[i]);        
     }
     fclose(fp);
 
    //核对信息是否正确
     printf("\n\t请核对信息是否正确。\n");
     print();
 
    sort();
     printf("\n\n\t排序后的内容为:\n");
     print();
 
    if(!(fp=fopen("stu_sort.txt","w")))//if(!(fp=fopen("stu_sort.txt","w")));此处有错,多了“;”。
     {
         printf("\n\n\t\t\t文件打开失败!\n");
         exit(0);///////////////////////////////如果这一句注释掉,提示文件打开失败,但是手动查看文件内容,发现已经写入了?这是为什么?????
     }
     for(i=0;i<5;i++)
     {
         fprintf(fp,"%d %s %.2f %.2f %.2f %.2f\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avr(stu[i].chinese,stu[i].math,stu[i].english));
     }
     fclose(fp);
 
    printf("\n经过排序后的信息已经写入文件。\n\n");
 
    return 0;
 }
 
float avr(float a,float b,float c)
 {
     return (a+b+c)/3;
 }
 
void sort()
 {
    void chenge(int i,int j);//我帮你加了声明,在自定义函数中还要声明。
     int i,j;
     float temp;
 
    for(i=0;i<4;i++)
     {
         for(j=i+1;j<5;j++)
         {
             if(avrmber[i]<avrmber[j])
             {
                 temp=avrmber[i];
                 avrmber[i]=avrmber[j];
                 avrmber[j]=temp;
 
                chenge(i,j);//此处出现报错,就是少了声明。
             }
 
        }
 
    }
 
}
 
void chenge(int i,int j)
 {
     int tempd;
     float tempf;
     char tempc[20];
 
    tempd=stu[i].num;
     stu[i].num=stu[j].num;
     stu[j].num=tempd;
 
    strcpy(tempc,stu[i].name);
     strcpy(stu[i].name,stu[j].name);
     strcpy(stu[j].name,tempc);
 
    tempf=stu[i].chinese;
     stu[i].chinese=stu[j].chinese;
     stu[j].chinese=tempf;
 
    tempf=stu[i].math;
     stu[i].math=stu[j].math;
     stu[j].math=tempf;
 
    tempf=stu[i].english;
     stu[i].english=stu[j].english;
     stu[j].english=tempf;
 
}
 
void print()
 {
     int i;
 
    for(i=0;i<5;i++)
     {
         printf("%d %s %.2f %.2f %.2f %.2f",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avrmber[i]);
         printf("\n");
     }
 }
 
2013-06-23 09:02
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 5楼 蚕头燕尾
自己写个局域网聊天工具或者ftp服务器加客户端,用到网络协议,socket编程,链表等等,这不比给别人写作业强

总有那身价贱的人给作业贴回复完整的代码
2013-06-23 09:09
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 5楼 蚕头燕尾
你觉得操作系统是不是一个软件?

总有那身价贱的人给作业贴回复完整的代码
2013-06-23 09:11
快速回复:文件在提示不能打开的情况下依然可以写入信息??
数据加载中...
 
   



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

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