注册 登录
编程论坛 C语言论坛

读取txt文件并保存到结构体数组中的相关问题

氻乐 发布于 2019-11-21 15:52, 3072 次点击
#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
为什么输出结果是一堆数字 ,后面还有搜索功能我应当如何实现 ,新手求助。
7 回复
#2
rjsp2019-11-21 16:30
你的代码能编译通过吗?

程序代码:
#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 );

#3
吹水佬2019-11-21 17:03
    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编辑过]

#4
氻乐2019-11-21 18:27
回复 2楼 rjsp
可以通过 但是显示6444404
#5
纯蓝之刃2019-11-21 19:09
回复 4楼 氻乐
我用二楼和三楼的都试了一下,都没问题啊,是不是你哪里用错了
#6
纯蓝之刃2019-11-21 19:27
回复 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 );
}
#7
氻乐2019-11-21 20:36
回复 6楼 纯蓝之刃
谢谢
#8
a955192019-11-22 02:24
xuedaolo
1