Чтение в массив из текстового файла - PullRequest
0 голосов
/ 24 мая 2018

Итак, я пытаюсь заставить мою программу считывать массив структур из текстового файла, и она хорошо компилируется, но, похоже, фактически не читает значения? .. и я понятия не имею, почему.Это соответствующая часть кода:

typedef struct Planet
{
char Planet_Name[30];
double Fuel;
double Velocity;
double Height;
double Gravity;
int Maximum_Thrust;
double Difficulty;
}Planet;


    //read the Planets from a file
    FILE* inputFile = fopen("Planets.txt", "r");
    if(inputFile == NULL)
    {
        perror("Error. File unavailable");
        exit(1);
    }

    for(j=0; j<10; j++)
    {   
        fscanf("%29s %lf %lf %lf %lf %d %lf", SolarSystem[j].Planet_Name, 
        SolarSystem[j].Fuel, SolarSystem[j].Velocity, 
        SolarSystem[j].Height, SolarSystem[j].Gravity, 
        SolarSystem[j].Maximum_Thrust, SolarSystem[j].Difficulty);
    }

    printf("Please select a planet by entering the corresponding number: 
    Mercury[0], Venus[1], Earth[2], Moon[3], Mars[4], Jupiter[5], Saturn[6], 
    Uranus[7], Neptune[8]\n");

    scanf("%d",&PlanetNum);

    printf("You have chosen %s", SolarSystem[PlanetNum].Planet_Name);

Это текстовый файл (название: Planets.txt)

Меркурий 120 50 500 12.1 30 2 Венера 120 50 500 29.1 30 6Земля 120 50 500 32,2 30 7 Луна 120 15 50 5,3 30 2 Марс 120 50 500 12,2 30 4 Юпитер 120 50 500 81,3 30 10 Сатурн 120 50 500 34,3 30 8 Уран 120 50 500 28,5 30 5 Нептун 120 50 500 36,6 30 9 Плутон120 50 500 2.03 30 1

За исключением случаев, когда он запускает этот последний printf, он на самом деле ничего не печатает и не сохраняет никаких данных в структурах (когда он вызывается позже, все нули).Идеи?

1 Ответ

0 голосов
/ 24 мая 2018

Ошибка с вашей функцией fscanf.Вы должны предоставить FILE pointer (inputFile Этот контекст) в качестве первого аргумента и оператор & (адрес, аналогичный функции scanf) перед целым числом сканирования и плавающей точкой.

Попробуйте это модифицированное fscanf код: -

fscanf(inputFile,"%s%lf%lf%lf%lf%d%lf",SolarSystem[j].Planet_Name,&SolarSystem[j].Fuel, &SolarSystem[j].Velocity, &SolarSystem[j].Height, &SolarSystem[j].Gravity,&SolarSystem[j].Maximum_Thrust, &SolarSystem[j].Difficulty);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...