C++ 结构和文件

C++ 结构和文件,c++,c,string,char,structure,C++,C,String,Char,Structure,我已经制作了文本文件studenti.txt 盖蒂斯·利特涅克斯1993年6月15日v Vizma Kalesnica 20.08.1991 s 卡特里娜萨伯恩6.12.1992南部 哈拉尔德·伯克夫斯基1989年2月1日v Jezups Martinovs 02.05.1990 v Vizma Zigurde 16.09.1988 s Stasija Balode 12.12.1993 s Jānis Bērziņš13.03.1992 v Zigurds Ritms 16.05.1990 v

我已经制作了文本文件studenti.txt

  • 盖蒂斯·利特涅克斯1993年6月15日v
  • Vizma Kalesnica 20.08.1991 s
  • 卡特里娜萨伯恩6.12.1992南部
  • 哈拉尔德·伯克夫斯基1989年2月1日v
  • Jezups Martinovs 02.05.1990 v
  • Vizma Zigurde 16.09.1988 s
  • Stasija Balode 12.12.1993 s
  • Jānis Bērziņš13.03.1992 v
  • Zigurds Ritms 16.05.1990 v
  • Pauls Zirdzins 12.11.1989 v
  • Zane Skarbule 28.12.1990年代
  • Aiga Bulle 11.08.1993 s
  • Andrejs Fomkins 11.06.1989 v
  • Maikls Dzordans 08.01.1988 v
  • 我想读取文件并在c程序输出中打印它

    我的代码是:

     #include <stdio.h>
     #include <conio.h>
     #include <string.h>
     #include <windows.h>
     #include <ctype.h>
     #define N 16
     int main()
     {
     FILE *fails_st;
    
     struct date
     { int da_year;
       int da_month;
       int da_day;
     };
    
     struct studenti
     {
     int Nr;
     char name[25];
     char surname[25];
     struct date dzd;
     char dzimums[1]; 
     } students[N];
    
     int i, j;
     system("cls");
    
     fails_st = fopen("studenti.txt", "r");
     for(i=0; i<N; i++)
     {
      fscanf(fails_st, "%d", &students[i].Nr);
      fgets(students[i].name, sizeof students[i].name, fails_st);
      fgets(students[i].surname, sizeof students[i].surname, fails_st);
      fscanf(fails_st, "%d", &students[i].dzd.da_day);
      fscanf(fails_st, "%d", &students[i].dzd.da_month);
      fscanf(fails_st, "%d", &students[i].dzd.da_year);
      fgets(students[i].dzimums, sizeof students[i].dzimums, fails_st);
      }
     fclose(fails_st);
    
    
     system("cls");
    
     printf("Student list\n");
     for(i=0; i<N; i++)
     printf("%d%s%s%d%d%d%s\n", students[i].Nr, 
     students[i].name, students[i].surname, 
     students[i].dzd.da_day,students[i].dzd.da_month,students[i].dzd.da_year,students[i].dzimums);
     getch();
     return 0;
     }
    
  • 从使用
    fgets()
    逐行读取开始
  • 如果第一个字符是数字,则使用
    strtol
    转换为数字
  • 使用
    strtok
    断行-将字符串拆分为以点和空格分隔的标记
  • 编辑:请按照上述步骤找到实现,以将文件读入结构。想法是使用
    fgets()
    读取每一行,并在所需的分隔符处使用
    strtok
    对其进行解析

        struct date
        { int da_year;
          int da_month;
          int da_day;
        };
    
        struct studenti
        {
          int Nr;
          char name[25];
          char surname[25];
          struct date dzd;
          char dzimums;
        } students[N];
    
    
        int main()
        {
           FILE *fails_st;
           char line[100];
           char *ptk; char * end; int i;
    
           fails_st = fopen("studenti.txt", "r");
           for(i=0; i < N && fgets(line, sizeof(line), fails_st) != NULL; i++)
           {
             students[i].Nr = strtol(line, &end, 10);
    
             ptk = strtok(line, " ");
             ptk = strtok(NULL, " ");
             strcpy(students[i].name, ptk);
    
             ptk = strtok(NULL, " ");
             strcpy(students[i].surname, ptk);
    
             ptk = strtok(NULL, ".");
             end = (ptk + strlen(ptk));
             students[i].dzd.da_day = strtol(ptk, &end, 10);
    
             ptk = strtok(NULL, ".");
             end = (ptk + strlen(ptk));
             students[i].dzd.da_month = strtol(ptk, &end, 10);
    
             ptk = strtok(NULL, " ");
             end = (ptk + strlen(ptk));
             students[i].dzd.da_year = strtol(ptk, &end, 10);
    
             ptk = strtok(NULL, " ");
             students[i].dzimums = *ptk;
           }
           fclose(fails_st);
    
           printf("Student list\n");
           for(i=0; i<N; i++)
           printf("%d. %s %s %d.%d.%d %c\n", students[i].Nr, students[i].name, 
                  students[i].surname, students[i].dzd.da_day, 
                  students[i].dzd.da_month, students[i].dzd.da_year, 
                  students[i].dzimums);
           return 0;
        }
    
    结构日期 {国际年; 国际大牛月; 国际日; }; 结构学生 { 国际天然气公司; 字符名[25]; 查氏[25]; 结构日期dzd; 查尔·季姆; }学生[N]; int main() { 文件*失败\u st; 字符行[100]; 字符*ptk;字符*end;int i; 未通过测试=fopen(“studenti.txt”、“r”); 对于(i=0;i对于(i=0;i
    fgets
    不是这样工作的)您确定您的学生希望成为StackOverflow的特色人物吗?
        struct date
        { int da_year;
          int da_month;
          int da_day;
        };
    
        struct studenti
        {
          int Nr;
          char name[25];
          char surname[25];
          struct date dzd;
          char dzimums;
        } students[N];
    
    
        int main()
        {
           FILE *fails_st;
           char line[100];
           char *ptk; char * end; int i;
    
           fails_st = fopen("studenti.txt", "r");
           for(i=0; i < N && fgets(line, sizeof(line), fails_st) != NULL; i++)
           {
             students[i].Nr = strtol(line, &end, 10);
    
             ptk = strtok(line, " ");
             ptk = strtok(NULL, " ");
             strcpy(students[i].name, ptk);
    
             ptk = strtok(NULL, " ");
             strcpy(students[i].surname, ptk);
    
             ptk = strtok(NULL, ".");
             end = (ptk + strlen(ptk));
             students[i].dzd.da_day = strtol(ptk, &end, 10);
    
             ptk = strtok(NULL, ".");
             end = (ptk + strlen(ptk));
             students[i].dzd.da_month = strtol(ptk, &end, 10);
    
             ptk = strtok(NULL, " ");
             end = (ptk + strlen(ptk));
             students[i].dzd.da_year = strtol(ptk, &end, 10);
    
             ptk = strtok(NULL, " ");
             students[i].dzimums = *ptk;
           }
           fclose(fails_st);
    
           printf("Student list\n");
           for(i=0; i<N; i++)
           printf("%d. %s %s %d.%d.%d %c\n", students[i].Nr, students[i].name, 
                  students[i].surname, students[i].dzd.da_day, 
                  students[i].dzd.da_month, students[i].dzd.da_year, 
                  students[i].dzimums);
           return 0;
        }