簡體   English   中英

如何在遇到新行之前讀取文件

[英]How do i read a file until a new line is encounterd

我有一個包含學生數據塊的文本文件。 例如:

student number 
name 
number of subjects 
subject code 1
subject code 2
subject....... etc

student number
name
..
.. etc

當我想要閱讀主題代碼時,我的問題出現了,因為每個塊都會有不同數量的主題,我需要閱讀每個主題,直到沒有更多的主題。 空行將在哪里。 因此,我想創建一個循環,直到新行。

順便說一句,每個塊都保存到一個結構數組中。

嘗試過使用strcmp但不確定我在做什么,不知道其他情況。

for(int j = 0; j < 8; j++) {
  fscanf(fptr,"%s",gRecs->subject[j].subjectcode);
  fscanf(fptr,"%d",&gRecs->subject[j].enrolnmentstat);
  fscanf(fptr,"%d",&gRecs->subject[j].mark);

  printf("%s\n",gRecs->subject[j].subjectcode);
  printf("%d\n",gRecs->subject[j].enrolnmentstat);
  printf("%d\n",gRecs->subject[j].mark);

}

我需要在for循環中添加一個while循環,以便在遇到空行時重置它。

for循環是這樣的,每個被保存到一個單獨的結構數組中,8是賦值給出的數量。

正如其他人建議你可以使用fgets 如果您不知道預先列出的主題數量,那么這樣的事情可能有效:

#include <stdio.h>
#include <stdlib.h>

#define MAXBUFF 128

int main()
{
    FILE* fp = fopen("stud", "r");

    char line[MAXBUFF];
    if (fp)
    {
        while (1)
        {
            char* c = NULL;
            while ((c = fgets(line, MAXBUFF, fp)) != NULL)
            {
                if (line[0] == '\n')
                {
                    printf("new student info's coming!\n");
                    break;
                }

                /* sscanf(...line...) -> process the line we just read */
                printf("%s", line);
            }

            if (c == NULL)
                break;
        }

        fclose(fp);
    }
    else
    {
        printf("Error opening file...");
    }
}

你可能需要在外部while循環中使用某種迭代器來為你的結構數組提供一些索引。

如果存儲在結構中的主題也存儲在某種類型的數組中,那么在內循環中可能還有另一個。

無論如何,這將讀取整個文件。 如果遇到一個新行,那么它將打破內循環,你可以繼續外循環中的下一個學生。 希望這在某種程度上有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM