簡體   English   中英

我正在嘗試使用 fscanf 從 .csv 文件中讀取

[英]I am trying to read from a .csv file with fscanf

我正在嘗試從 csv 文件中讀取,但輸出不是我所期望的輸出是這樣的:

|1| |Dummy,Person| || 
|2| |Dummy,Person| || 
|3| |Dummy,Person| || 
|4| |Dummy,Person| ||     

我希望它是:

|1| |Dummy| |Person| 
|2| |Dummy| |Person| 
|3| |Dummy| |Person| 
|4| |Dummy| |Person| 

我該怎么辦? 這是代碼:

struct Person {
    int id;
    char firstname[50];
    char lastname[50];
} Person;

void loadPersonInfo(FILE *fp) {
    int knt;
    int id;

    for (knt = 1; knt < 5; knt++) {
        struct Person new_person;
        char firstname[50];
        char lastname[50];

        fscanf(fp, "%d , %s ,%s ", &id, firstname, lastname);

        strcpy(new_person.firstname, firstname);
        strcpy(new_person.lastname, lastname);
        new_person.id = id;
        People[knt] = new_person;
        printf("|%d| |%s| |%s| \n", People[knt].id, People[knt].firstname,
               People[knt].lastname);
    }
}

void readFile() {
    printf("Reading Data From People.csv File.\r\n ");
    FILE *fp;
    fp = fopen("People.csv", "r");
    if (fp == NULL) {
        printf("File could not be opened \r\n");
    } else {
        loadPersonInfo(fp);
    }
    fclose(fp);
    printf("Done!\r\n");
}

因為%s沒有停在, 它在第一個非空白字符處停止。 因此,您的 scanf 中的第一個%s讀取該行直到換行符,包括,和第二個字段。

A %[^,]將首先停止, 確保檢查fscanf的返回值。 不要在沒有指定最大寬度的情況下使用%s%[ ,以便防止溢出錯誤。

int ret = fscanf(fp, "%d,%49[^,],%49[^\n]", &id, firstname, lastname);
if (ret != 3) { 
      // AAaaa! error
      abort();
}

cppreference scanf

for (knt = 1; knt < 5; knt++)

請注意,數組從 0 開始索引,而不是從 1 開始。

暫無
暫無

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

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