鱼C论坛

 找回密码
 立即注册
查看: 5511|回复: 9

文件操作fwrite文件内容的问题

[复制链接]
发表于 2012-5-17 15:33:11 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>
#define n 3
struct student
{
    int num;
    char name[20];
    int age;
} stu[n];

void save()
{
    FILE *p;
    //char fname[20];
    int i;
    //printf("文件名不需要后缀:\n");
    //scanf("%s",fname);
    //gets(fname);
    if( !(p=fopen("fname","wb")))
    {
        printf("illegal input,cann't find!");
        return;
    }
    for (i=0;i<n;i++)
    {
        if(fwrite(&stu[i],sizeof(struct student),1,p)!=1)
        {
            fclose(p);
        }
        fprintf(p,"\n");
    }
}   
    void main()
    {
        int i;
        printf("请输入学生的学号,姓名,年龄:\n");
        for (i=0;i<n;i++)
        {
            scanf("%d,%s,%d\n",&stu[i].num,&stu[i].name,&stu[i].age);
        }
        save();
    }

1.上面这个我输入
1,2,3
2,2,3
3,3,3
输入出到文件中 第一列都没有输出来 是个符号。
2.为什么用gets(fname); 编译通过,但执行会报错呢。debug assertion failed! ......expression:*file!=_t('\0 ').....



最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-17 15:33:12 | 显示全部楼层
   for (i=0;i<n;i++)
    {
        if(fwrite(&stu,sizeof(struct student),1,p)!=1)
        {
            fclose(p);
        }
        fprintf(p,"\n");
    }
}                                                把你的代码改成这样,   if(fwrite(&stu[i],sizeof(student),1,p)!=1)
                                            造成你的错误的原因就是 你用了个for循环 把往文件写东西的时候 只写进去;了 你结构体数组的的第一项,也就是stu[0]  ,你那样语法都有问题,stu本来就是个&stu[0] 这个表达式的简写,已经是一个常量,所以对他区地址已经没有意义,按理要出错,没有出错只是编译器对这个东西做了个特殊处理。总之你错误的原因主要是没有跟for取得联系,没有遍历整个结构体数组
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-22 09:51:04 | 显示全部楼层
#include <stdio.h>
#define n 3
struct student
{
        int num;
        char name[20];
        int age;
} stu[n];

void save()
{
        FILE *p;
        //char fname[20];
        int i;
        //printf("文件名不需要后缀:\n");
        //scanf("%s",fname);
        //gets(fname);
        if( !(p=fopen("fname","wb")))
        {
                printf("illegal input,cann't find!");
                return;
        }
        for (i=0;i<n;i++)
        {
                if(fwrite(&stu[i],sizeof(struct student),1,p)!=1)
                {
                        fclose(p);
                }
                fprintf(p,"\n");
        }
}       
        void main()
        {
                int i;
                printf("请输入学生的学号,姓名,年龄:\n");
                for (i=0;i<n;i++)
                {
                        scanf("%d,%s,%d\n",&stu[i].num,&stu[i].name,&stu[i].age);
                }
                save();
        }
我改成这样也还是一样的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-22 09:52:04 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-26 12:18:21 | 显示全部楼层
#include "stdafx.h"
#define n 3
struct student
{
        int num;
        char name[20];
        int age;
} stu[n];

void save()
{
        FILE *p;
        //char fname[20];
        int i;
        //printf("文件名不需要后缀:\n");
        //scanf("%s",fname);
        //gets(fname);
        if( !(p=fopen("fname","wb")))
        {
                printf("illegal input,cann't find!");
                return;
        }
        for (i=0;i<n;i++)
        {
                if(fwrite(&stu[i],sizeof(struct student),1,p)!=1)
                {
                        fclose(p);
                }
                printf("%d--%s--%d\n",stu[i].num,stu[i].name,stu[i].age);
        }
}        
void main()
{
      int i;
       printf("请输入学生的学号,姓名,年龄:\n");
       for (i=0;i<n;i++)
       {
           scanf("%d%s%d\n",&stu[i].num,stu[i].name,&stu[i].age);
       }
       save();
}
这个代码 是对的   你最先的问题 主要就是  数组问题   &stu[i] 哪里   最后你改过来以后打印有问题,是因为你的 输出文件函数有问题,fpritf(p,"\n");你这个函数 没有起作用, 我给你改成 直接输出结构体了,如果你要真正输出文件的内容,可以用 fread函数  读取文件的内容到你原来的结构体,然后输出结构体,好像有专门用来输出文件的函数,我忘记了。但是你要用一个函数的话,就查好他的功能,合理运用,不能盲目。。。。。以后像这方面的问题,你调试一下 就很明显的能找出问题。。。 楼主加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-28 10:47:26 | 显示全部楼层
Tzdner_C 发表于 2012-5-26 12:18
#include "stdafx.h"
#define n 3
struct student

我是要向文件里写结构体的。不是直接输出。而且这个代码输出的内容也不对。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-6-3 11:39:16 | 显示全部楼层
jolly 发表于 2012-5-28 10:47
我是要向文件里写结构体的。不是直接输出。而且这个代码输出的内容也不对。

你写进去了啊     你执行完了看下你的文件   肯定写进去了啊  输出的问题   你自己去参考下C程序设计后面的输出函数   输出文件
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-7 17:26:03 | 显示全部楼层
默默学习中。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-7 23:16:29 | 显示全部楼层
学习学习。。。。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-14 04:26:34 | 显示全部楼层
回复看看我会不会
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-13 09:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表