标题:读取txt文件并保存到结构体数组中的相关问题
只看楼主
氻乐
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-11-9
结帖率:0
已结贴  问题点数:20 回复次数:7 
读取txt文件并保存到结构体数组中的相关问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int choice,i;
struct student//定义结构体数组用于储存学生的相关信息
{
    char number[20];   // 学号
    char name[11]; // 姓名(最多5个字)
    char gender[3]; // 性别
    int age;    // 年龄
    char major[30]; // 专业班级
 };
int main()
    int i;
    struct student students[1000];
    FILE *fin;
    fin = fopen("genDATA.txt","r");//打开数据文件,按照读的方式
    for(i=0;i<400;i++)
    fscanf(fin,"%[^,],%[^,],%[^,],%d,%s",&students[i].number, &students[i].name, &students[i].gender, &students[i].age, &students[i].major);//扫描文件储存在结构数组中,%[^,] 含义字符串以,为结束标志
    fclose(fin);//关闭文件
    printf("%s %s %s %d %s\n", students[i].number, students[i].name, &students[i].gender, &students[i].age, students[i].major);
   
}
txt文件格式为:
20140014061005,周子淇,男,19,机械工程1406
20140014061006,周梓杉,女,20,软件工程1406
20140014061007,张欣竹,女,21,计算机1406
20140014061008,吕娅楠,男,21,大数据1406
20140014061009,齐彬宇,男,20,大数据1406
20140014061010,吕聪瑶,男,22,机械工程1406
20140014071001,齐骏金,女,18,软件工程1407
20140014071002,温润玉,女,17,软件工程1407
20140014071003,齐晨轩,男,18,计算机1407
20140014071004,吕品洁,男,22,软件工程1407
为什么输出结果是一堆数字 ,后面还有搜索功能我应当如何实现 ,新手求助。
搜索更多相关主题的帖子: txt 结构体 char 数组 文件 
2019-11-21 15:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
你的代码能编译通过吗?

程序代码:
#include <stdio.h>

struct student
{
    char number[20];
    char name[11];
    char gender[3];
    int age;
    char major[30];

 };

int main( void )
{
    struct student students[1000];
    size_t num = 0;

    FILE* fin = fopen( "genDATA.txt", "r" );
    if( fin )
    {
        for( size_t i=0; i!=sizeof(students)/sizeof(*students); ++i )
        {
            int n = fscanf( fin," %19[^,], %10[^,], %2[^,],%d , %29[^\n]%*c", &students[i].number, &students[i].name, &students[i].gender, &students[i].age, &students[i].major );

            if( n == 5 )
                ++num;
            else if( n<=0 && feof(fin) )
                break;
            else
            {
                printf( "第 %zu 行格式错误\n", i+1 );
                break;
            }
        }
        fclose( fin );
    }

    for( size_t i=0; i!=num; ++i )
        printf( "%s %s %s %d %s\n", students[i].number, students[i].name, &students[i].gender, &students[i].age, students[i].major );

收到的鲜花
  • 纯蓝之刃2019-11-21 18:33 送鲜花  2朵  
  • 氻乐2019-11-21 20:42 送鲜花  1朵   附言:谢谢解答
2019-11-21 16:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
    int i = 0;
    while (fscanf(fin,"%[^,],%[^,],%[^,],%d,%s",students[i].number, students[i].name, students[i].gender, &students[i].age, students[i].major)==5)
    {
        printf("%s %s %s %d %s\n", students[i].number, students[i].name, students[i].gender, students[i].age, students[i].major);
        ++i;
    }


[此贴子已经被作者于2019-11-21 17:11编辑过]

收到的鲜花
  • 氻乐2019-11-21 20:42 送鲜花  1朵   附言:谢谢解答
2019-11-21 17:03
氻乐
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-11-9
得分:0 
回复 2楼 rjsp
可以通过 但是显示6444404
2019-11-21 18:27
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:5 
回复 4楼 氻乐
我用二楼和三楼的都试了一下,都没问题啊,是不是你哪里用错了

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-21 19:09
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
回复 4楼 氻乐
我帮你把2楼的改了一下,消除了一些告警,你再试试。

程序代码:
#include <stdio.h>

struct student
{
    char number[20];
    char name[11];
    char gender[3];
    int age;
    char major[30];


 };

int main( void )
{
    struct student students[1000];
    int num = 0;

    FILE* fin = fopen( "genDATA.txt", "r" );
    if( fin )
    {
        for( int i=0; i!=sizeof(students)/sizeof(*students); ++i )
        {
            int n = fscanf( fin," %19[^,], %10[^,], %2[^,],%d , %29[^\n]%*c", students[i].number, students[i].name, students[i].gender, &students[i].age, students[i].major );

            if( n == 5 )
                ++num;
            else if( n<=0 && feof(fin) )
                break;
            else
            {
                printf( "第 %d 行格式错误\n", i+1 );
                break;
            }
        }
        fclose( fin );
    }

    for( int i=0; i!=num; ++i )
        printf( "%s %s %s %d %s\n", students[i].number, students[i].name, students[i].gender, students[i].age, students[i].major );
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-21 19:27
氻乐
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-11-9
得分:0 
回复 6楼 纯蓝之刃
谢谢
2019-11-21 20:36
a95519
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2019-11-22
得分:5 
xuedaolo
2019-11-22 02:24



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




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

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