Итак, я пытаюсь заставить мою программу считывать массив структур из текстового файла, и она компилируется нормально, но, похоже, на самом деле не читает значения? .. И я понятия не имею, почему. Это соответствующая часть кода:
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 50500 29,1 30 6 Земля 120 50500 32,2 30 7 Луна 120 15 50 5,3 30 2 Марс 120 50500 12,2 30 4 Юпитер 120 50500 81,3 30 10 Сатурн 120 50 500 34,3 30 8 Уран 120 50 500 28,5 30 5 Нептун 120 50500 36,6 30 9 Плутон 120 50 500 2,03 30 1
Кроме того, когда он запускает последний printf, он фактически ничего не печатает и не хранит никаких данных в структурах (когда он вызывается позже, он все обнуляется). Идеи?
Примите ответ, если вас устраивает.
У меня есть еще один вопрос .. Но на сайте написано, что мне нужно подождать два дня, чтобы снова опубликовать сообщение .. wtf? Правильно ли я просто вставил это ниже вышеупомянутого? ..
где ты застрял.? Есть запись в файл ..?
@Liam: Я вернул ваш вопрос к исходной форме. Если у вас есть новый вопрос, его нужно опубликовать отдельно, как новый вопрос. Вы должны проголосовать / принять ответ ниже, если он вам помог. Это также поможет повысить вашу репутацию и разблокировать привилегии на сайте.
Как мне принять это? .. И я здесь не надолго, ха-ха. Как только я закончу с этой глупой темой, я уйду ... Не могу дождаться, чтобы избавиться от нее.
@Liam: рядом с ответом под кнопками "за" / "против" под кнопками "за" / "против" есть контур галочки (также известный как "галочка" на английском языке). Нажмите на это, и он должен стать зеленым. Вы также можете проголосовать за ответчика, пока находитесь там, чтобы выразить свою признательность за его помощь.
@PaulR Спасибо! Я просто слепой. По-видимому, мои голоса не учитываются, кстати





Ошибка в вашей функции fscanf. Вы должны указать FILE pointer (inputFile This context) в качестве первого аргумента и оператор & (адрес функции Подобно 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);
Ах, бездельник ... Я только что перепроверил обучающее видео, которое смотрю, он прокрадывается, не комментируя, вот почему я его пропустил! Я должен спросить, откуда вы знаете, где разместить эти символы? Обычно я просто играю с ними в своих переменных, пока программа не заработает должным образом.
Проще говоря, другие, которые читают string (символьный массив), скорее всего, вам нужно использовать оператор &.
@Liam когда использовать амперсанды и звездочки в C
@TormundGiantsbane Я читал ... Честно говоря, это не имело особого смысла. Программирование - не мое. Я терпеть не могу
@anoopknr: Я откатил ваш ответ до предыдущей версии, чтобы он соответствовал исходному вопросу OP (до того, как OP радикально изменил его).
См.: Как спросить и подумайте о подготовке минимальный воспроизводимый пример.