Předání struktury jako parametr funkce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Předání struktury jako parametr funkce – C / C++ – Fórum – Programujte.comPředání struktury jako parametr funkce – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
avalagne0
Newbie
3. 1. 2013   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 194.228.13.–
Řešení
vitamin+8
Grafoman
3. 1. 2013   #2
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

v scanf sa double nacitava pomocou %lf .

Doporucujem neprogramovat v noci, vysledky vecsinou nestoja za to...      

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
avalagne0
Newbie
3. 1. 2013   #3
-
0
-

#2 vitamin
Jsi bůh v tuto chvíli pro mě   
Díky tobě jdu spát  

Já věděl, že to bude strašná blbost... Díky moc za radu, zavírám to!

Nahlásit jako SPAM
IP: 194.228.13.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý