I can\'t seem to figure out this program. The output should look something like
ID: 3690158 • Letter: I
Question
I can't seem to figure out this program. The output should look something like this:
Welcome to Planet-Palooza!!!
* Please make a choice from the following:
* 1. Add a planet
* 2. Delete a planet
* 3. Show all planets in list
* 4. Quit this program
//selecting 1 will ask you to enter a planet name, capital, longitude and latitude
2 will delete a planet
3 will show all the planets in the list
4. will quit
So far I have this, but I keep getting an error with #include "stdafx.h"
// StatesAndCapitals.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>
struct Planet
{
char name[100];
char capital[100];
float lon,lat;
struct Planet *next;
};
struct Planet head;
struct Planet *EnterNewPlanet()
{
struct Planet *newplanet;
newplanet = (struct Planet *)malloc(sizeof(struct Planet));
printf("Please enter the name:");
gets(newplanet->name);
strtok(newplanet->name, " ");
printf("Please enter the capital:");
gets(newplanet->capital);
strtok(newplanet->capital, " ");
printf("Please enter the longtitude:");
scanf("%f", &newplanet->lon);
printf("Please enter the lattitude:");
scanf("%f", &newplanet->lat);
newplanet->next = NULL;
return(newplanet);
}
void AppendToList()
{
struct Planet *newplanet = EnterNewPlanet();
struct Planet *walker = head.next;
while (walker->next != NULL ) // != NULL)
{
walker = walker->next;
}
walker->next = newplanet;
}
void InsertInSortedOrder()
{
struct Planet *newplanet = EnterNewPlanet();
struct Planet *walker = head.next;
while (walker != NULL)
{
int cmp = _stricmp(newplanet->name, walker->name);
if (cmp < 0)
{
newplanet->next = walker->next;
walker->next = newplanet;
return;
}
}
}
void LoadData()
{
int howmanyplanet, i;
struct Planet *walker;
char temp[10];
FILE *fp = fopen("c:\work\data.txt", "r");
if (fp == NULL)
{
printf("The data file could not be opened. ");
return;
}
fscanf(fp, "%d", &howmanyplanet);
fgets(temp, sizeof(temp), fp);
walker = &head;
for (i = 0; i < howmanyplanet; i++)
{
struct Planet *newplanet = (struct Planet *)malloc(sizeof(struct Planet));
fgets(newplanet->name, sizeof(newplanet->name), fp);
strtok(newplanet->name, " ");
fgets(newplanet->capital, sizeof(newplanet->capital), fp);
strtok(newplanet->capital, " " );
fscanf(fp, "%f", &newplanet->lon);
fgets(temp, sizeof(temp), fp);
fscanf(fp, "%f", &newplanet->lat);
fgets(temp, sizeof(temp), fp);
newplanet->next = NULL;
walker->next = newplanet;
walker = walker->next;
}
fclose(fp);
}
void DisplaySinglePlanet(struct Planet *st)
{
printf("Name:%s, Capital:%s, long:%f, lat:%f ", st->name, st->capital, st->lon, st->lat);
}
void SearchForPlanet()
{
char search[100];
struct Planet *walker;
printf("Please enter a planet to search for:");
gets(search);
strtok(search, " ");
walker = head.next;
while (walker != NULL)
{
if (_stricmp(search, walker->name) == 0)
{
DisplaySinglePlanet(walker);
return;
}
walker = walker->next;
}
printf("That planet was now found! ");
}
void DisplayList()
{
struct Planet *walker;
walker = head.next;
while (walker != NULL)
{
DisplaySinglePlanet(walker);
walker = walker->next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LoadData();
DisplayList();
SearchForPlanet();
return 0;
}
Explanation / Answer
Hi, I have fixed compilation issue. Please test it.
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Planet
{
char name[100];
char capital[100];
float lon,lat;
struct Planet *next;
};
struct Planet head;
struct Planet *EnterNewPlanet()
{
struct Planet *newplanet;
newplanet = (struct Planet *)malloc(sizeof(struct Planet));
printf("Please enter the name:");
fgets(newplanet->name, 100, stdin);
strtok(newplanet->name, " ");
printf("Please enter the capital:");
fgets(newplanet->capital, 100, stdin);
strtok(newplanet->capital, " ");
printf("Please enter the longtitude:");
scanf("%f", &newplanet->lon);
printf("Please enter the lattitude:");
scanf("%f", &newplanet->lat);
newplanet->next = NULL;
return(newplanet);
}
void AppendToList()
{
struct Planet *newplanet = EnterNewPlanet();
struct Planet *walker = head.next;
while (walker->next != NULL ) // != NULL)
{
walker = walker->next;
}
walker->next = newplanet;
}
void InsertInSortedOrder()
{
struct Planet *newplanet = EnterNewPlanet();
struct Planet *walker = head.next;
while (walker != NULL)
{
int cmp = strcmp(newplanet->name, walker->name);
if (cmp < 0)
{
newplanet->next = walker->next;
walker->next = newplanet;
return;
}
}
}
void LoadData()
{
int howmanyplanet, i;
struct Planet *walker;
char temp[10];
FILE *fp = fopen("c:\work\data.txt", "r");
if (fp == NULL)
{
printf("The data file could not be opened. ");
return;
}
fscanf(fp, "%d", &howmanyplanet);
fgets(temp, sizeof(temp), fp);
walker = &head;
for (i = 0; i < howmanyplanet; i++)
{
struct Planet *newplanet = (struct Planet *)malloc(sizeof(struct Planet));
fgets(newplanet->name, sizeof(newplanet->name), fp);
strtok(newplanet->name, " ");
fgets(newplanet->capital, sizeof(newplanet->capital), fp);
strtok(newplanet->capital, " " );
fscanf(fp, "%f", &newplanet->lon);
fgets(temp, sizeof(temp), fp);
fscanf(fp, "%f", &newplanet->lat);
fgets(temp, sizeof(temp), fp);
newplanet->next = NULL;
walker->next = newplanet;
walker = walker->next;
}
fclose(fp);
}
void DisplaySinglePlanet(struct Planet *st)
{
printf("Name:%s, Capital:%s, long:%f, lat:%f ", st->name, st->capital, st->lon, st->lat);
}
void SearchForPlanet()
{
char search[100];
struct Planet *walker;
printf("Please enter a planet to search for:");
fgets(search, 100, stdin);
strtok(search, " ");
walker = head.next;
while (walker != NULL)
{
if (strcmp(search, walker->name) == 0)
{
DisplaySinglePlanet(walker);
return;
}
walker = walker->next;
}
printf("That planet was now found! ");
}
void DisplayList()
{
struct Planet *walker;
walker = head.next;
while (walker != NULL)
{
DisplaySinglePlanet(walker);
walker = walker->next;
}
}
int main(int argc, char* argv[])
{
LoadData();
DisplayList();
SearchForPlanet();
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.