Saya mencoba fscanf() ke dalam array struct. Saya telah mengikuti resolusi yang disarankan sebelum membuat posting ini, tetapi untuk beberapa alasan sepertinya tidak membaca semua data dalam file. Ini baru permulaan dari apa yang saya butuhkan lengkap, karena nanti saya harus mengurutkan item di struct saya.

#define LCOUNT 128  // Sizeof of single line
#define ROW_COUNT 2 // Number of lines in file

struct Hurricane {
    char Year[50];
    char Name[50];  
    char State[50];
};

int main() {
    
    struct Hurricane hurricane[ROW_COUNT]; // Declare hurricane of type Hurricane array
    
    // File operations
    FILE *fptr = fopen("hurricane.txt", "r");
    
    // Return error if file no bueno
    if (fptr == NULL) {
        fprintf (stderr, "Failed to open file");
        return -1;
    }
    
    // Start of row
    int ROW;
    
    // Read comma as delimiter into Struct
    while(ROW != ROW_COUNT) {
        
            fscanf(fptr, "%[^,],%[^,],%[^,]\n", &hurricane[ROW].Year, &hurricane[ROW].Name, &hurricane[ROW].State);
            printf("%s\t%s\t%s\n", hurricane[ROW].Year, hurricane[ROW].Name, hurricane[ROW].State);
            ROW++;
        
    }
        
    // Close file
    fclose(fptr);
    
    return 0;
}

Dan isi file saya:

1960, Donna, FL-NC

1969, Camille, MS

1972, Agnes, FL

Dan kemudian outputnya:

1960 Donna FL-NC

1969

-------------------------------- Proses keluar setelah 0,02288 detik dengan nilai kembalian 0 Tekan sembarang tombol untuk melanjutkan. . .

0
user1010852 11 April 2020, 19:34

1 menjawab

Jawaban Terbaik
  • ROW_COUNT harus 3 dan bukan 2
  • ROW harus diinisialisasi seperti yang disebutkan bruno dalam komentar: int ROW = 0;
  • panggilan fscanf akan terlihat seperti ini

    fscanf(fptr, "%[^,],%[^,],%[^\n]\n", hurricane[ROW].Year, hurricane[ROW].Name, hurricane[ROW].State);
    

Jika Anda mencari ,%[^,] sebagai bagian terakhir dari string, maka baca sampai koma berikutnya, tetapi baris Anda tidak diakhiri dengan koma. Oleh karena itu lebih baik menggunakan mis.%[^\n].

2
KamilCuk 11 April 2020, 16:54