Ahoj,
mám z 99% hotovou semestrální práci, ale vyhořel jsem na úplné blbosti. Nemůžu přijít na to, jak naplnit a předat strukturu jedné funkci, kde ji potřebuju zpracovat.
Jedná se o projekt delší a než abych sem vkládal všechny moduly, tak sem vložím pouze části, kterých se to týká:
Mám soubor gps.h:
#pragma once
typedef struct gps
{
double latit, longit;
} tGPS;
Dále v souboru seznamPamatek.c tuto funkci, které se to celé týká:
tPamatka *najdiNejblizsi(tGPS *gps)
{
tPamatka *pomocna = NULL, *nejblizsiPamatka = NULL;
double nejblizsi = 0;
if(prvni == NULL)
{
return NULL;
}
pomocna = prvni;
nejblizsiPamatka = prvni;
nejblizsi = zjistiVzdalenost(*gps, prvni->gps);
do
{
double nejblizsiPom = 0;
nejblizsiPom = zjistiVzdalenost(*gps, pomocna->gps); // pouze vrátí nejbližší GPS souřadnici, 100% funkční
if(nejblizsiPom < nejblizsi)
{
nejblizsi = nejblizsiPom;
nejblizsiPamatka = pomocna;
}
pomocna = pomocna->dalsi;
}
while(pomocna != NULL);
return nejblizsiPamatka;
}
A samozřejmě funkci main napsanou takto:
#include <stdlib.h>
#include <stdio.h>
#include "seznamPamatek.h"
void vypisMenu();
int main()
{
char *nazevSouboru = NULL;
tPamatka *hledanaPamatka = NULL;
tPamatka *nejblizsiPamatka = NULL;
tPamatka **triNejblizsiPamatky = NULL;
char zadanaPamatka[21];
double zemSirka, zemDelka;
int volba = -1, retNactiData = -1;
tGPS gpsPamatky;
nazevSouboru = "DataImport_Zamky.txt";
while(volba != 0)
{
vypisMenu();
printf("Zadejte volbu: ");
scanf("%d", &volba);
switch(volba)
{
case 1:
retNactiData = nactiData(nazevSouboru);
if(retNactiData == 1)
{
printf("-----------------------------------\nData nactena!\n");
}
break;
case 2:
vypis();
break;
case 3:
printf("-----------------------------------\nZadejte nazev hledane pamatky velkymi pismeny: ");
scanf("%s", zadanaPamatka);
fflush(stdin);
hledanaPamatka = najdiDleNazvu(zadanaPamatka);
printf("-----------------------------------\nVysledek hledani: %s\n", hledanaPamatka->pamatka);
printf("GPS pamatky: %f\t%f\n-----------------------------------\n", hledanaPamatka->gps.latit, hledanaPamatka->gps.longit);
hledanaPamatka = NULL;
break;
case 4:
// NEFUNGUJE
zemSirka = 0;
zemDelka = 0;
printf("-----------------------------------\nZadejte zemepisnou sirku pamatky: ");
scanf("%f", &zemSirka);
gpsPamatky.latit = zemSirka; // zde hodnota 5.424144514504e-315#DEN
printf("Zadejte zemepisnou delku pamatky: ");
scanf("%f", &zemDelka);
gpsPamatky.longit = zemDelka; // zde hodnota 5.424144514504e-315#DEN
nejblizsiPamatka = najdiNejblizsi(&gpsPamatky);
printf("-----------------------------------\nNejblizsi pamatka k zadanym souradnicim: %s\n", nejblizsiPamatka->pamatka);
break;
case 5:
// NEFUNGUJE
zemSirka = 0;
zemDelka = 0;
printf("-----------------------------------\nZadejte zemepisnou sirku pamatky: ");
scanf("%f", &zemSirka);
gpsPamatky.latit = zemSirka;
printf("Zadejte zemepisnou delku pamatky: ");
scanf("%f", &zemDelka);
gpsPamatky.longit = zemDelka;
triNejblizsiPamatky = najdiTriNejblizsi(&gpsPamatky);
printf("-----------------------------------\nTri nejblizsi pamatky k zadanym souradnicim:\n");
printf("%d. nejblizsi pamatka: %s\n", 1, triNejblizsiPamatky[0]);
printf("%d. nejblizsi pamatka: %s\n", 2, triNejblizsiPamatky[1]);
printf("%d. nejblizsi pamatka: %s\n", 3, triNejblizsiPamatky[2]);
break;
case 6:
zrusData();
break;
case 7:
vypisMenu();
break;
case 0:
return 0;
default:
printf("-----------------------------------\nNeznama volba!\n");
}
}
system("pause");
return 0;
}
void vypisMenu()
{
printf("-----------------------------------\n1: nacteni dat\n");
printf("2: vypsani dat\n");
printf("3: nalezeni pamatky dle nazvu\n");
printf("4: nalezeni nejblizsi pamatky\n");
printf("5: nalezeni nejblizsich pamatek\n");
printf("6: zruseni dat\n");
printf("7: vypsani menu\n");
printf("0: konec programu\n-----------------------------------\n");
}
Nevím jestli už jsem tak ospalej a nevidím tam tu chybu nebo co... Jak jsem napsal v komentáři ve funkci main, pořád tam mám nedefinovanou hodnotu 5.424144514504e-315#DEN.
// EDIT: Zapomněl jsem napsat, co vlastně chci. Potřebuju z klávesnice načíst dvě hodnoty (zeměpisnou šířku a délku), tyto hodnoty uložit do té struktury gpsPamatky a poté s ní pracovat ve funkci najdiNejblizsi()...
Děkuju za jakýkoliv rady. Kdyby bylo potřeba něco vysvětlit, tak stačí napsat.