加油forme 发表于 2019-7-2 11:27:20

数据块写函数

始终写入不正确。
执行完之后输入,接着输出结构体数组stud是正确的,但是写入文件就写的不对了。也没有返回错误,只是写入不对。
#include<stdio.h>
#include<stdlib.h>//p320
#define SIE 4
struct student_type
{
        char name;
        int num;
        int age;
        char addr;
}stud;
void save()
{
        FILE *fp;
        int i;
        if((fp=fopen("d:\\stu_list.txt","w"))==NULL)
        {
                printf("文件打开失败\n");
                exit(1);
        }
        for (i = 0; i < SIE; i++)
        {
                if (fwrite(&stud, sizeof(struct student_type), 1, fp) != 1)
                        printf("文件写入失败\n");
        }
        fclose(fp);
}
/*void display()
{
        FILE* fp;
        int i;
        if (fp = (fopen("d:\\stu_list.txt", "r")) == NULL)//只读方式打开文件
        {
        printf("文件打开失败\n");
        exit(1);
        }
        for(i = 0;i<SIE; i++)
        {
                fread(&stud, sizeof(struct student_type), 1, fp);
                printf("%-10s,%4d,%4d,%-15s", stud.name, stud.num, stud.age, stud.addr);
        }
        fclose(fp);
}*/
int main()
{
        int i;
        printf("请输入:\n姓名\t\tid\t年龄\t家乡\n");
        for (i = 0; i < SIE; i++)
        {
                scanf("%s%d%d%s", stud.name, &stud.num, &stud.age, stud.addr);
                printf("下一个\n");
        }
/*        for (i = 0; i < SIE; i++)
        {
                printf("%s,\t%d,\t%d,\t%s\n", stud.name, stud.num, stud.age, stud.addr);
        }*/
        save();
/*        display();*/
        return 0;
}

我就是个弟弟 发表于 2019-7-2 13:34:57

本帖最后由 我就是个弟弟 于 2019-7-2 13:38 编辑

画一个结构体的内存模型, 数据都没填满结构体,你拷贝什么?
你这样只会脏写

我看了一下文档,你看fput和fputs行不行,一个成员一个成员的写进去。

我就是个弟弟 发表于 2019-7-2 13:43:06

还有fprint应该也可以

我就是个弟弟 发表于 2019-7-2 13:43:37

说白了就是一个重定向

加油forme 发表于 2019-7-2 13:55:45

我就是个弟弟 发表于 2019-7-2 13:43
还有fprint应该也可以

用fprint可以正常运行了
页: [1]
查看完整版本: 数据块写函数