| | |
| Stránka: 1 z 1
| [ Príspevkov: 16 ] | |
Autor | Správa |
---|
Registrovaný: 22.12.15 Prihlásený: 06.01.16 Príspevky: 8 Témy: 1 | Napísal Naro: 22.12.2015 14:29 | |
|
Pekne odpoledne, snazim sa naucit zaklady v jazyku C a momentalne mam problem s lineranim seznamem. Mam nacitat hrace ze souboru, alokovat, pridat do linearniho seznamu a vypsat je. Tu je ukazka kodu, problem mam na poslednich par radkach pocinaje pridanim do seznamu. Nacitani je v poradku. Pro orientaci v seznamu mam pouzit promenne prvni a aktualni. Dakujem za reakce. Kód: typedef struct hrac { int cislo; char jmeno[50]; enum Pozice pozice; int utocnaSila; int obrannaSila; struct hrac *dalsi; } HRAC;
static HRAC* prvni = NULL; static HRAC* aktualni = NULL;
void nactiSeznamHracu(char* nazevSouboru) { FILE *f = NULL;
if (nazevSouboru == NULL) { return; } if (prvni != NULL) { // v seznamu uz neco je -> zrusit seznam } f = fopen(nazevSouboru, "r"); // oteviram soubor if (f == NULL) { printf("Soubor se nepodarilo otevrit\n"); return; }
printf("Soubor se podarilo otevrit\n"); char buffer[512]; char buffCislo[10] = {}; char buffJmeno[10] = {}; char buffUtok[10] = {}; char buffObrana[10] = {}; char buffPozice[10] = {}; // cislo;jmeno;utok;obrana;pozice int retVal = fscanf (f, "%5s;%5s;%4s;%6s;%6s",buffCislo, buffJmeno, buffUtok, buffObrana, buffPozice); // kontrola souboru - hlavicky if (retVal != 5 || memcmp(buffCislo, "cislo", 5) != 0 || memcmp(buffJmeno, "jmeno", 5) != 0 || memcmp(buffUtok, "utok", 4) != 0 || memcmp(buffObrana, "obrana", 6) != 0 || memcmp(buffPozice, "pozice", 6) != 0 ) { printf("Soubor je poskozen, spatne zadana hlavicka souboru.\n"); return; } int cislo = 0; char jmeno[50] = {}; int utok = 0; int obrana = 0; char pozice = 0x00; while(1) { retVal = fscanf(f, "%d;%50[^;];%d;%d;%c", &cislo, jmeno, &utok, &obrana, &pozice ); if (retVal != 5) { if (retVal == -1) { // jsem na konci souboru break; } else { printf("Soubor je poskozen. Spatne zadani hraci\n"); fclose(f); return; } } POZICE pos; switch(pozice) { case 'U': pos = UTOCNIK; break; case 'O': pos = OBRANCE; break; case 'B': pos = BRANKAR; break; default: fclose(f); printf("Soubor je poskozen, spatne zadana pozice.\n"); return; break; } HRAC* novyHrac = vytvorHrace(cislo, jmeno, pos, utok, obrana); if (novyHrac == NULL) { printf("chyba ve funkci VytvorHrace\n"); fclose(f); return; } else {
Tu se dostavam k problemuKód: // Pridame do seznamu if(prvni==NULL) { prvni = novyHrac; } else if(prvni->dalsi == NULL) { prvni = prvni->dalsi; } fclose(f); // vypíše hráče se seznamu na každý řádek jednoho // (používá opakovaně funkci pro výpis jednoho hráče z hrac.h)
void vypisSeznamHracu() { HRAC* pomocnyHrac = prvni; while(pomocnyHrac != NULL) { pomocnyHrac = prvni->dalsi; vypisHrace(pomocnyHrac); } if(pomocnyHrac ==NULL) { } }
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 22.12.2015 15:39 | |
|
a kde je presne ten problém? myslím, že viem kde máš problém ale aj tak ma to zaujíma, kde si myslíš ty, že je // Spojený príspevok Uto 22.12.15 15:50Kód: else { // Pridame do seznamu if(prvni==NULL) { prvni = novyHrac; } else if(prvni->dalsi == NULL) { /*prvni = prvni->dalsi;*/ prvni->dalsi = aktualni = novyHrac; } else { aktualni->dalsi = novyHrac; aktualni = novyHrac; } fclose(f); } } } // vypíše hráče se seznamu na každý řádek jednoho // (používá opakovaně funkci pro výpis jednoho hráče z hrac.h)
void vypisSeznamHracu() { HRAC* pomocnyHrac = prvni; while(pomocnyHrac != NULL) { pomocnyHrac = prvni->dalsi; vypisHrace(pomocnyHrac); } if(pomocnyHrac ==NULL) { } }
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 22.12.15 Prihlásený: 06.01.16 Príspevky: 8 Témy: 1 | Napísal autor témy Naro: 23.12.2015 0:27 | |
|
Tak jsem nad tim badal a zkusil jsem vsechno - no stale je nekde chyba jeste jinde(zrejme v vypisSeznamHracu()). At to zkusim upravit vsemozne, vzdy mi to vypise bud pouze prvniho a nebo se program zacykli a vypisuje stale stejneho ... spatne tam pouzivam prvni/aktualni... Toto mi vypisuje zacyklene druheho hrace. No veru neviem ako to zrobit, aby vypsalo od 1. az do posledneho hrace. Kazdopadne dakujem za prvni radu, urcite jsem se posunul o krok dal. Kód: void vypisSeznamHracu() { HRAC* pomocnyHrac = prvni; while (pomocnyHrac != NULL) {
pomocnyHrac = prvni -> dalsi; vypisHrace(pomocnyHrac); } }
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 23.12.2015 7:24 | |
|
Nemenis pomocneho hraca... Kód: void vypisSeznamHracu() { HRAC* pomocnyHrac = prvni; while (pomocnyHrac != NULL) { vypisHrace(pomocnyHrac); pomocnyHrac = pomocnyHrac -> dalsi; } }
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 22.12.15 Prihlásený: 06.01.16 Príspevky: 8 Témy: 1 | Napísal autor témy Naro: 24.12.2015 15:45 | |
|
Prominte, ze rusim klidnou vanocni atmosferu No pomalu na to zacinam prichazet, dodelal jsem dalsi metody. Momentalne delam zrusSeznamHracu(), ktery dealokuje celý linearni seznam. V literature jsem nasel, ze pro dealokaci se pouziva funkcie free(). Zkusil jsem to zakomponovat do meho prikladu, no nekde je chybka Kód: void zrusSeznamHracu() { aktualni = prvni; HRAC* pom = prvni; while (aktualni != NULL) { pom = aktualni->dalsi; free(aktualni); } aktualni = pom -> dalsi; } PS: Jeste se chci zeptat, pri vypise hracu mi to v nektere casti vypisuje ruzne znaky. Je mozne, ze na techto pametovych mistech uz je neco ulozene z minula a proto t odela takovyto binec? Pomuze na to funkce zrusSeznamHracu()? Prikladam obrazek http://prntscr.com/9i2kkmDekuji, nebyt vas, stoural bych se v tom jeste dlouho Prajem pekne svatky
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 24.12.2015 16:00 | |
|
Kód: void zrusSeznamHracu() { HRAC *pom1 = prvni; HRAC *pom2;
while (pom1->dalsi != NULL) { pom2 = pom1->dalsi; free(pom1); pom1 = pom2; } free(pom1); }
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 22.12.15 Prihlásený: 06.01.16 Príspevky: 8 Témy: 1 | Napísal autor témy Naro: 24.12.2015 17:06 | |
|
Zkusil jsem, probehne bez erroru, ale pri vypisu tam udaje o hracich stale jsou. Rozdil je v tom, ze v udaji cislo hrace je jina hodnota.. http://prntscr.com/9i3hzs
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 24.12.2015 22:02 | |
|
môžeš tu dať celý kód aj vstup?
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 22.12.15 Prihlásený: 06.01.16 Príspevky: 8 Témy: 1 | Napísal autor témy Naro: 24.12.2015 22:55 | |
|
Fuuu, to bude na dlouho Neni to jeste doupravene a doladene, nejdrive zkousim zhruba udelat vsechny metody. Vstup z .csv souboru http://ulozto.sk/xhsooJ9F/hraci-csvKod mainKód: #include <stdio.h> #include <stdlib.h>
#include <Hrac.h> #define POCET_HRACU_V_TYMU 5 int main(int argc, char** argv) { HRAC** hraciUzivatel; HRAC** hraciPC; int volba = 0; int cisloHrace = 0; do{ printf("1-Nacti hrace do seznamu ze souboru CSV \n"); printf("2-Vypis seznam hracu \n"); printf("3-Pridej hrace do seznamu \n"); printf("4-Odeber hrace ze seznamu \n"); printf("5-Zrus seznam hracu \n"); printf("6-Vyber hrace do obou tymu \n"); printf("7-Simulace zapasu \n"); printf("7-Ukoncit program \n"); printf("volba:"); scanf("%d", &volba); switch (volba) { case 1: nactiSeznamHracu("hraci.csv"); break; case 2: printf("Vypisuji hrace:\n"); vypisSeznamHracu(); break; case 3: // pridejHraceDoSeznamu(hrac); break; case 4: printf("Zadej cislo hrace pro odebrani: "); scanf("%d", &cisloHrace); odeberHraceZeSeznamu(cisloHrace); break; case 5: zrusSeznamHracu(); break; case 6: // vyberHraceStridaveDoObouTymu(hraciUzivatel, hraciPC); break; case 7: printf("Simulace zapasu. "); break; case 8: exit(1); default: printf("N/A"); break; } }while(volba != 8); }
seznamHracu.cKód: #include <stddef.h> // NULL #include <stdio.h> #include <string.h> #include <stdlib.h> #include <Hrac.h> static HRAC* prvni = NULL; static HRAC* aktualni = NULL; // static, aby byly vidět jen v tomto souboru
// postupně načte jednotlivé hráče ze souboru a popřidává je za sebe do lineárního seznamu void nactiSeznamHracu(char* nazevSouboru) { FILE *f = NULL; if (nazevSouboru == NULL) { return; } if (prvni != NULL) { // v seznamu uz neco je -> zrusit seznam zrusSeznamHracu(); } f = fopen(nazevSouboru, "r"); // oteviram soubor if (f == NULL) { printf("Soubor se nepodarilo otevrit\n"); return; }
printf("Soubor se podarilo otevrit\n"); char buffer[1024]; char buffCislo[10] = {}; char buffJmeno[10] = {}; char buffUtok[10] = {}; char buffObrana[10] = {}; char buffPozice[10] = {}; // cislo;jmeno;utok;obrana;pozice int retVal = fscanf (f, "%5s;%5s;%4s;%6s;%6s",buffCislo, buffJmeno, buffUtok, buffObrana, buffPozice); // kontrola souboru - hlavicky if (retVal != 5 || memcmp(buffCislo, "cislo", 5) != 0 || memcmp(buffJmeno, "jmeno", 5) != 0 || memcmp(buffUtok, "utok", 4) != 0 || memcmp(buffObrana, "obrana", 6) != 0 || memcmp(buffPozice, "pozice", 6) != 0 ) { printf("Soubor je poskozen, spatne zadana hlavicka souboru.\n"); return; } int cislo = 0; char jmeno[50] = {}; int utok = 0; int obrana = 0; char pozice = 0x00; while(1) { retVal = fscanf(f, "%d;%50[^;];%d;%d;%c", &cislo, jmeno, &utok, &obrana, &pozice ); if (retVal != 5) { if (retVal == -1) { // jsem na konci souboru break; } else { printf("Soubor je poskozen. Spatne zadani hraci\n"); fclose(f); return; } } POZICE pos; switch(pozice) { case 'U': pos = UTOCNIK; break; case 'O': pos = OBRANCE; break; case 'B': pos = BRANKAR; break; default: fclose(f); printf("Soubor je poskozen, spatne zadana pozice.\n"); return; break; } HRAC* novyHrac = vytvorHrace(cislo, jmeno, pos, utok, obrana); pridejHraceDoSeznamu(novyHrac); } }
void vypisSeznamHracu() { aktualni = prvni; while (aktualni != NULL) { vypisHrace(aktualni); aktualni = aktualni -> dalsi; } }
void pridejHraceDoSeznamu(HRAC* hrac) { FILE *f; HRAC* novyHrac; if (novyHrac == NULL) { printf("Chyba ve funkci VytvorHrace\n"); fclose(f); return; } else { // Pridame do seznamu if(prvni==NULL) { prvni = novyHrac; } else if(prvni->dalsi == NULL) { prvni->dalsi = aktualni = novyHrac; } else { aktualni -> dalsi = novyHrac; aktualni = novyHrac; } } }
HRAC* odeberHraceZeSeznamu(int cisloHrace) { //neodebira prvniho, musim predelat aktualni = prvni; HRAC* pomocnyPredchozi = prvni; while (aktualni != NULL) { pomocnyHrac = NULL; prvni = prvni->dalsi; } else { */ HRAC* pom = aktualni->dalsi; //nasledujici prvek po odebiranem pomocnyPredchozi -> dalsi = pom; aktualni = NULL; // smazu zvoleneho hrace aktualni = pomocnyPredchozi; } pomocnyPredchozi = aktualni; aktualni = aktualni -> dalsi; // posun seznamem } }
// dealokuje celý lin. sez.(nestačí jen první/aktualni nastavit na NULL) void zrusSeznamHracu() { HRAC *pom1 = prvni; HRAC *pom2;
while (pom1->dalsi != NULL) { pom2 = pom1->dalsi; free(pom1); pom1 = pom2; } free(pom1); }
// vybere hráče podle jeho čísla ze seznamu hráčů, pokud číslo neexistuje vrátí NULL, // a odebere ho ze seznamu HRAC * vyberHrace(int cisloHrace) { prvni = aktualni; while (aktualni != NULL) { if(cisloHrace == aktualni -> cislo) { return aktualni; printf("Hrac byl vybran. \n"); break; } aktualni = aktualni -> dalsi; } } // vybere hráče s maximální útočnou silou HRAC * nejlepsiUtocnik() { }
// vybere hráče s maximální obrannou silou HRAC* nejlepsiObrance() { }
// vybere brankáře s maximální obrannou silou HRAC * nejlepsiBrankar() { } } // return nejlepsiBrankar; */ } hrac.cKód: #include <stddef.h> // NULL #include <malloc.h> // malloc #include <stdio.h> // printf #include <string.h> // memcpy
#include <Hrac.h>
// dynamicky alokuje proměnnou hráč, nastaví parametry a vrátí ji, ukazatel dalsi se nastaví na NULL HRAC* vytvorHrace(int cislo, char* jmeno, enum Pozice pozice, int utocnaSila, int obrannaSila) { HRAC* novyHrac = NULL; if (jmeno == NULL) { return NULL; } novyHrac = (HRAC*) malloc ( sizeof(HRAC) ); if (novyHrac == NULL) { return NULL; } novyHrac->cislo = cislo; memcpy(novyHrac->jmeno, jmeno, strlen(jmeno)); novyHrac->pozice = pozice; novyHrac->utocnaSila = utocnaSila; novyHrac->obrannaSila = obrannaSila; novyHrac->dalsi = NULL; return novyHrac; }
void dealokujHrace(HRAC* hrac) { if (hrac != NULL) { free(hrac); } }
// vypíše např. 68 Jaromir Jagr - utok: 8, obrana: 2, pozice: U" void vypisHrace(HRAC* hrac) { if (hrac == NULL) { printf("hrac je null"); return; } printf("%d ", hrac->cislo); if (hrac->jmeno != NULL) { printf(" %s ", hrac->jmeno); } else { printf("Jmeno: N/A\n"); } char* poziceStr = NULL; switch(hrac->pozice) { case UTOCNIK: poziceStr = "Utocnik"; break; case OBRANCE: poziceStr = "Obrance"; break; case BRANKAR: poziceStr = "Brankar"; break; default: poziceStr = "N/A"; break; } printf("Pozice: %s ", poziceStr); printf("Utocna sila: %d ", hrac->utocnaSila); printf("Obranna sila: %d\n ", hrac->obrannaSila); }
// vrátí 1 pokud je daný hráč brankář, a 0 pokud brankář není int jeBrankar(HRAC* hrac) { if (hrac == NULL) { return -1; } return (hrac->pozice == BRANKAR ? 1 : 0); }
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 24.12.2015 23:30 | |
|
Kód: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stddef.h>
int main(int argc, char* argv[]) { FILE* f = NULL; if (argc == 1) return 1;
f = fopen(argv[1], "r"); if (f == NULL) return 1;
char buffer[1024]; char buffCislo[10] = {}; char buffJmeno[10] = {}; char buffUtok[10] = {}; char buffObrana[10] = {}; char buffPozice[10] = {};
int retVal = fscanf (f, "%5s;%5s;%4s;%6s;%6s", buffCislo, buffJmeno, buffUtok, buffObrana, buffPozice);
int cislo = 0; char jmeno[50] = {}; int utok = 0; int obrana = 0; char pozice = 0x00;
while(1) { retVal = fscanf(f, "%d;%50[^;];%d;%d;%c", &cislo, jmeno, &utok, &obrana, &pozice ); if (retVal != 5) { if (retVal == -1) { // jsem na konci souboru break; } else { printf("Soubor je poskozen. Spatne zadani hraci\n"); fclose(f); return 1; } }
/*POZICE pos; switch(pozice) { case 'U': pos = UTOCNIK; break; case 'O': pos = OBRANCE; break; case 'B': pos = BRANKAR; break; default: fclose(f); printf("Soubor je poskozen, spatne zadana pozice.\n"); return 1; break; }*/ printf("%d\t%s\t%d\t%d\t%c\n", cislo, jmeno, utok, obrana, pozice); } return 0; } tak trochu som očakával, že to je chyba systému, Java mala problémy s koncami riadkov ešte keď som používal windows... skúste tento kód (názov súboru dávate ako argument programu), ak to nevytlačí dobre, tak to zle načítava zo súboru potom to je pri štruktúrach ak to vyjde dobre
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 22.12.15 Prihlásený: 06.01.16 Príspevky: 8 Témy: 1 | Napísal autor témy Naro: 25.12.2015 1:01 | |
|
Kód: int main(int argc, char* argv[]) { argv[1] = "hraci.csv"; FILE* f = NULL; if (argc == 1) return 1; f = fopen(argv[1], "r"); Takto v pripade, ze se soubor jmenuje hraci.csv + zbytek vaseho kodu ? Len problikne konzole, nic se nevypise.
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 25.12.2015 1:18 | |
|
nie ... ak chcete len tak a nezadavate pri spusteni uplne staci Kód: int main(void) { FILE* f = NULL; f = fopen("hraci.csv", "r");
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 22.12.15 Prihlásený: 06.01.16 Príspevky: 8 Témy: 1 | Napísal autor témy Naro: 25.12.2015 13:31 | |
|
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 25.12.2015 13:33 | |
|
tak sa ešte pozriem na tie štruktúry ako sa ukaldajú // Spojený príspevok Pia 25.12.15 14:16openSUSE Tumbleweed, kompilátor gcc: zobraziť Kód: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stddef.h>
typedef struct HRAC { int cislo; char jmeno[50]; char pozice; int utocnaSila; int obrannaSila; struct HRAC* dalsi; } HRAC;
void vypisHrace(HRAC*); HRAC* vytvorHrace(int cislo, char* jmeno, char pozice, int utocnaSila, int obrannaSila);
int main(int argc, char* argv[]) { FILE* f = NULL; if (argc == 1) return 1;
f = fopen(argv[1], "r"); if (f == NULL) return 1;
char buffer[1024]; char buffCislo[10] = {}; char buffJmeno[10] = {}; char buffUtok[10] = {}; char buffObrana[10] = {}; char buffPozice[10] = {};
int retVal = fscanf (f, "%5s;%5s;%4s;%6s;%6s", buffCislo, buffJmeno, buffUtok, buffObrana, buffPozice);
int cislo = 0; char jmeno[50] = {}; int utok = 0; int obrana = 0; char pozice = 0x00;
while(1) { retVal = fscanf(f, "%d;%50[^;];%d;%d;%c", &cislo, jmeno, &utok, &obrana, &pozice ); if (retVal != 5) { if (retVal == -1) { // jsem na konci souboru break; } else { printf("Soubor je poskozen. Spatne zadani hraci\n"); fclose(f); return 1; } }
/*POZICE pos; switch(pozice) { case 'U': pos = UTOCNIK; break; case 'O': pos = OBRANCE; break; case 'B': pos = BRANKAR; break; default: fclose(f); printf("Soubor je poskozen, spatne zadana pozice.\n"); return 1; break; }*/ printf("%d\t%s\t%d\t%d\t%c\n", cislo, jmeno, utok, obrana, pozice); HRAC* temp = vytvorHrace(cislo, jmeno, pozice, utok, obrana); vypisHrace(temp); } return 0; }
void vypisHrace(HRAC* struktura) { printf("%d\t%s\t%d\t%d\t%c\n", struktura->cislo, struktura->jmeno, struktura->utocnaSila, struktura->obrannaSila, struktura->pozice); }
HRAC* vytvorHrace(int cislo, char* jmeno, char pozice, int utocnaSila, int obrannaSila) { HRAC* novyHrac = NULL;
if (jmeno == NULL) { return NULL; }
novyHrac = (HRAC*) malloc ( sizeof(HRAC) ); if (novyHrac == NULL) { return NULL; }
novyHrac->cislo = cislo; memcpy(novyHrac->jmeno, jmeno, strlen(jmeno)); novyHrac->pozice = pozice; novyHrac->utocnaSila = utocnaSila; novyHrac->obrannaSila = obrannaSila; novyHrac->dalsi = NULL;
return novyHrac; } Prvý riadok je načítané zo vstupu a druhý riadok je výpis zo štruktúry Kód: ./main hraci.csv 1 Pekka Rinne 0 13 B 1 Pekka Rinne 0 13 B 2 Duncan Keith 4 6 O 2 Duncan Keith 4 6 O 4 Caldwell Pugh 2 8 O 4 Caldwell Pugh 2 8 O 5 Damon Combs 2 8 O 5 Damon Combs 2 8 O 6 Shea Weber 3 7 O 6 Shea Weber 3 7 O 7 Camden Bradshaw 1 9 O 7 Camden Bradshaw 1 9 O 8 Merritt Goodman 4 6 O 8 Merritt Goodman 4 6 O 9 Ian Rhodes 8 2 U 9 Ian Rhodes 8 2 U 10 Corey Perry 8 2 U 10 Corey Perry 8 2 U 11 Daniel Nielsen 0 10 O 11 Daniel Nielsen 0 10 O 13 Macaulay Mcmillan 1 9 O 13 Macaulay Mcmillan 1 9 O 14 Kirk Allison 0 10 O 14 Kirk Allison 0 10 O 15 Pavel Datsyuk 7 3 U 15 Pavel Datsyuk 7 3 U 16 Nathan Blevins 2 8 O 16 Nathan Blevins 2 8 O 17 Lyle Lynch 1 9 O 17 Lyle Lynch 1 9 O 18 Noah Myers 1 9 O 18 Noah Myers 1 9 O 19 Byron Hale 9 1 U 19 Byron Hale 9 1 U 20 Ryan Suter 4 6 O 20 Ryan Suter 4 6 O 21 Dane Preston 4 6 O 21 Dane Preston 4 6 O 22 Oren Burke 2 8 O 22 Oren Burke 2 8 O 23 Dominic Lindsay 9 1 U 23 Dominic Lindsay 9 1 U 24 Richard Harmon 1 9 O 24 Richard Harmon 1 9 O 26 Austin Fulton 8 2 U 26 Austin Fulton 8 2 U 30 Corey Crawford 0 12 B 30 Corey Crawford 0 12 B 31 Henrik Lundqvist 0 14 B 31 Henrik Lundqvist 0 14 B 32 Jonathan Quick 0 13 B 32 Jonathan Quick 0 13 B 33 Dean Anthony 9 1 U 33 Dean Anthony 9 1 U 34 Griffin Doyle 9 1 U 34 Griffin Doyle 9 1 U 35 Carey Price 0 15 B 35 Carey Price 0 15 B 36 Matthew Mendoza 10 0 U 36 Matthew Mendoza 10 0 U 37 Clinton Guy 4 6 O 37 Clinton Guy 4 6 O 38 Denton Miles 4 6 O 38 Denton Miles 4 6 O 41 Mike Smith 0 12 B 41 Mike Smith 0 12 B 42 Nasim Larsen 1 9 O 42 Nasim Larsen 1 9 O 43 Dillon Bryant 9 1 U 43 Dillon Bryant 9 1 U 44 Ferdinand Elliott 10 0 U 44 Ferdinand Elliott 10 0 U 45 Gage Oneill 1 9 O 45 Gage Oneill 1 9 O 46 Ignatius Head 8 2 U 46 Ignatius Head 8 2 U 47 Lawrence Garza 0 10 O 47 Lawrence Garza 0 10 O 49 Len Mcdaniel 1 9 O 49 Len Mcdaniel 1 9 O 50 Zachary Camacho 0 10 O 50 Zachary Camacho 0 10 O 51 Reese Mcclure 0 10 O 51 Reese Mcclure 0 10 O 52 Michael Scott 7 3 U 52 Michael Scott 7 3 U 53 Gabriel Barrera 1 9 O 53 Gabriel Barrera 1 9 O 55 Niklas Kronwall 4 6 O 55 Niklas Kronwall 4 6 O 56 Emmanuel Dillon 6 4 U 56 Emmanuel Dillon 6 4 U 57 Drew Rollins 1 9 O 57 Drew Rollins 1 9 O 58 Ezra Carter 1 9 O 58 Ezra Carter 1 9 O 59 Erich Larson 4 6 O 59 Erich Larson 4 6 O 60 Carlos Duncan 9 1 U 60 Carlos Duncan 9 1 U 61 Clayton Washington 0 10 O 61 Clayton Washington 0 10 O 62 Rajah Montgomery 4 6 O 62 Rajah Montgomery 4 6 O 64 Clinton Snow 4 6 O 64 Clinton Snow 4 6 O 65 Erik Karlsson 5 5 O 65 Erik Karlsson 5 5 O 67 Tiger Bruce 1 9 O 67 Tiger Bruce 1 9 O 68 Jaromir Jagr 8 2 U 68 Jaromir Jagr 8 2 U 69 Raymond Ramos 7 3 U 69 Raymond Ramos 7 3 U 70 Cole Chambers 3 7 O 70 Cole Chambers 3 7 O 71 Quentin Joseph 2 8 O 71 Quentin Joseph 2 8 O 72 Gary Johnson 6 4 U 72 Gary Johnson 6 4 U 73 Yoshio Gill 4 6 O 73 Yoshio Gill 4 6 O 73 Bert Tate 10 0 U 73 Bert Tate 10 0 U 74 Gray Sherman 0 10 O 74 Gray Sherman 0 10 O 75 Stone Aguilar 1 9 O 75 Stone Aguilar 1 9 O 76 PK Subban 5 5 O 76 PK Subban 5 5 O 77 Chaney Wells 6 4 U 77 Chaney Wells 6 4 U 78 Tucker Davidson 0 10 O 78 Tucker Davidson 0 10 O 80 Charles Douglas 6 4 U 80 Charles Douglas 6 4 U 81 Odysseus Mercado 4 6 O 81 Odysseus Mercado 4 6 O 82 Kyle Diaz 2 8 O 82 Kyle Diaz 2 8 O 83 Isaac Griffith 0 10 O 83 Isaac Griffith 0 10 O 84 Brendan Shaw 3 7 O 84 Brendan Shaw 3 7 O 85 Jack Lee 1 9 O 85 Jack Lee 1 9 O 86 Travis Hays 2 8 O 86 Travis Hays 2 8 O 88 Patrick Kane 9 1 U 88 Patrick Kane 9 1 U 89 Octavius Oneal 9 1 U 89 Octavius Oneal 9 1 U 90 Knox Berger 9 1 U 90 Knox Berger 9 1 U 91 Tyler Seguin 7 3 U 91 Tyler Seguin 7 3 U 92 Jackson Pennington 3 7 O 92 Jackson Pennington 3 7 O 93 Deacon Cobb 3 7 O 93 Deacon Cobb 3 7 O 95 Zephania Stout 4 6 O 95 Zephania Stout 4 6 O 96 Keefe Massey 7 3 U 96 Keefe Massey 7 3 U 97 Michael Barron 2 8 O 97 Michael Barron 2 8 O 98 Murphy Chapman 2 8 O 98 Murphy Chapman 2 8 O
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 22.12.15 Prihlásený: 06.01.16 Príspevky: 8 Témy: 1 | Napísal autor témy Naro: 27.12.2015 18:31 | |
|
Vyse uvedene jiz funguje. Zbyva mi zkontrolovat, zda dynamicke pole ukazatelu(hraciUzivatel) obsahuje 1 brankare. V podmince volam funkci maTymBrankare s parametrem hraciUzivatel - pole ukazatelu. Pokud nema, vratim hrace zpet do seznamu. Na konci je zobrazena metoda int maTymBrankare(HRAC** tym). Chybu mi kompilator nevyhodi, ale kdyz vybuilduju a spustim, tak program prestane pracovat. Nemam tuseni, kde muze byt problem. Dekuji za vas cas. Kód: HRAC** hraciUzivatel = NULL; hraciUzivatel = (HRAC**) calloc(POCET_HRACU_V_TYMU, sizeof (HRAC*)); Kód: if(maTymBrankare(hraciUzivatel) == 0) { //nema brankare, vrat do seznamu, ukazatele v poli nastavit na NULL pro oba týmy printf("Tým uzivatele nemá brankare. Hraci byli vraceni zpet do seznamu."); int i; for (i = 0; i < POCET_HRACU_V_TYMU; i++) { pridejHraceDoSeznamu(hraciPC[i]); hraciPC[i] = NULL; pridejHraceDoSeznamu(hraciUzivatel[i]); hraciUzivatel[i] = NULL; } } else { vyberTrueFalse = 1; } } Kód: int maTymBrankare(HRAC** tym) {
int i; for (i = 0; i < POCET_HRACU_V_TYMU; i++) { if(jeBrankar(hraciUzivatel[i]) == 1) { return 1; break; } else { return 0; } } return 0; }
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 27.12.2015 19:28 | |
|
nejak nechápem načo predávaš funkcii maTymBrankare odkaz na pole, keď to pole vo funckii vôbec nepoužívaš Kód: int maTymBrankare(HRAC** tym) {
int i; for (i = 0; i < POCET_HRACU_V_TYMU; i++) { if (jeBrankar(tym[i]) == 1) return 1; } return 0; }
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
| Stránka: 1 z 1
| [ Príspevkov: 16 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|