标题:请问,如何将这个改为动态内存分配
只看楼主
杨。。
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2021-6-30
结帖率:0
已结贴  问题点数:20 回复次数:2 
请问,如何将这个改为动态内存分配
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<ctype.h>
#include<malloc.h>
#define SIZE 10
struct Signal_type
{
    char Name[10];
    int  KB;
    float Pos;
    int Type;
}sign[40];
int main()
{
    int i;
    printf("请输入信号机的信息:\n");
        for(i=0;i<SIZE;i++)
        {scanf(" %c %d %2.1f %d ",sign[i].Name,&sign[i].KB,&sign[i].Pos,sign[i].Type);
        getchar();}
    WriteToFile();
       MainMenu();
        return 0;
}
void WriteToFile()
{
    FILE*fp;
    int i ;
    if((fp=fopen("E:\\sign.txt","wb"))==NULL)
    {
        printf("不能打开文件\n");
        return;
    }
    for(i=0;i<SIZE;i++)
        if(fwrite(&sign[i],sizeof(struct Signal_type),1,fp)!=1)
            printf("文件写入失败\n");
        fclose(fp);
}
搜索更多相关主题的帖子: include 动态 SIZE int printf 
2021-06-30 19:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
听不懂你想要怎么改?

来都来了,我帮你将代码改正确吧
程序代码:
#include <stdio.h>

struct Signal_type
{
    char Name[10];
    int KB;
    float Pos;
    int Type;
};

int main( void )
{
    FILE* fp = fopen( "E:\\sign.txt", "wb" );
    if( !fp )
    {
        puts( "存档文件打开失败" );
        return 1;
    }

    puts( "请输入信号机的信息:" );
    for( struct Signal_type sign; 4==scanf("%9s%d%f%d",sign.Name,&sign.KB,&sign.Pos,&sign.Type); )
    {
        if( fwrite(&sign,sizeof(sign),1,fp) != 1 )
        {
            puts( "文件存档写入失败" );
            fclose( fp );
            return 2;
        }
    }

    fclose( fp );
    return 0;
}
2021-07-01 08:57
diycai
Rank: 8Rank: 8
等 级:贵宾
威 望:19
帖 子:147
专家分:895
注 册:2021-5-18
得分:10 
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<ctype.h>
#include<malloc.h>

struct Signal_type
{
    char Name[10];
    int  KB;
    float Pos;
    int Type;
} *sign;

void MainMenu()
{
}

void WriteToFile(int size)
{
    FILE*fp;
    int i ;
    if((fp=fopen("D:\\sign.txt","wb"))==NULL)
    {
        printf("不能打开文件\n");
        return;
    }
    for(i=0;i<size;i++)
        if(fwrite(&sign[i],sizeof(struct Signal_type),1,fp)!=1)
            printf("文件写入失败\n");
        fclose(fp);
}

int main()
{
    float a = 1.0;
    int i;
    int size;

    printf("请输入信号机的数量:\n");
    if (scanf("%d", &size) != 1)
    {
        printf("获取信号机的数量失败\n");
        return 1;
    }

    sign = (struct Signal_type *)malloc(sizeof(struct Signal_type)*size);
    if (sign == NULL)
    {
        printf("动态分配空间失败\n");
        return 1;
    }

    for(i=0; i<size; i++)
    {
        printf("请输入信号机%d的信息:\n", i);
        scanf("%s%d%f%d", sign[i].Name, &sign[i].KB, &sign[i].Pos, &sign[i].Type);
    }

    WriteToFile(size);
    free(sign);

    MainMenu();
   
    return 0;
}
2021-07-01 11:41



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




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

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