簡體   English   中英

C程序:從文件讀取和復制到結構?

[英]C Program: Reading from file and copying to a struct?

我正在為一個班級工作,我在應用文件輸入/輸出和結構時遇到了麻煩。 我有這個代碼從文件中讀取不同的汽車並將其信息復制到一個結構數組。

#include <stdio.h>

#define MAX_LEN 1000 
#define NAME_LEN 30

struct car{
    char make[NAME_LEN + 1];
    char model[NAME_LEN + 1];
    int year;
    int cmpg;
    int hmpg;
    int avgmpg;
};
.
.
.
int main()
{
    int i;

    struct car cars[MAX_LEN];

    FILE* pFile;
    pFile = fopen("cars.txt", "r");

    .
    .
    .
    .

    for(i = 0; i < MAX_LEN; i++)
    {
        while(!feof(pFile) && !ferror(pFile))
            {
            fscanf(pFile, "%s%s%d%d%d ", cars[i].make, cars[i].model, &cars[i].year, &cars[i].cmpg, &cars[i].hmpg);
            cars[i].avgmpg = (cars[i].cmpg + cars[i].hmpg) / 2;
        }
    }

    selection_sort(cars, MAX_LEN);

    FILE* outFile;
    outFile = fopen("sorted_cars.txt", "w");

    fprintf(outFile, "Make     Model year  city mpg  highway mpg average mpg\n");

    for(i = 0; i < MAX_LEN; i++);
    {   
        fprintf(outFile, "%s %s %d %-2d %-10d %-12d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].cmpg, cars[i].hmpg, cars[i].avgmpg); 
        printf("%s %s %d %d %d %d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].cmpg, cars[i].hmpg, cars[i].avgmpg);
    }


    fclose(pFile);
    fclose(outFile);
    return 0;
    }

這就是.txt文件的樣子:

Mercury Sable 2009 18 28
Jeep Wrangler 2016 17 21
Honda Civic 2015 31 41
Toyota Corolla 2015 30 42
Toyota Prius 2010 51 48
Ford Escape 2013 23 33
Ford Fusion 2013 25 37
Acura MDX 2014 20 28
Lexus RX 2013 32 28

我在我的代碼中插入了一個打印功能,所以我可以看到汽車是否正常讀取,但是當我運行程序時,這是輸出:

▒▒▒800 1465899048 32767

我完全不知道為什么會這樣。 有人可以幫忙嗎?

首先刪除while()並輸入if(!feof(pFile) && !ferror(pFile)) 在你的fscanf() for cars文件中,在類型說明符之間放置空格。 它應該是這樣的

fscanf(pFile, "%s %s %d %d %d", cars[i].make, cars[i].model, &cars[i].year, &cars[i].cmpg, &cars[i].hmpg); cars[i].avgmpg = (cars[i].cmpg + cars[i].hmpg) / 2;

在直接寫入文件之前,首先只在控制台中打印struct的值,以及是否以正確的方式獲取它。

最后一個修改是使用它而不是使用它

fprintf(outFile, "%s %s %d %-2d %-10d %-12d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].cmpg, cars[i].hmpg, cars[i].avgmpg);

用這個

fprintf(outFile, "%s %s %d %d %d %d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].cmpg, cars[i].hmpg, cars[i].avgmpg);

我希望這能幫到您。

暫無
暫無

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

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