Avatar
jaroslav.bena:

Zdravím, mohl byste mi někdo prosím překontrolovat kód na slovní fotbal, kde se načítají slova ze slovníku (oddělené středníkem)? Nefungují mi slova ze slovníku a já už si nevím rady :( jde o jazyk C

Editováno 9.12.2013 16:24
 
Odpovědět 9.12.2013 16:21
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Nahoru Odpovědět 9.12.2013 16:28
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
jaroslav.bena:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static char** g_words = NULL;
static int g_totalWords = 0;
{
FILE *fr;

fr = fopen("slovnik­.txt", "r");
char buffer[1024];
int line = 0;

if (!file)
{
printf("Soubor se nepodarilo otevrit nebo neexistuje!");
return EXIT_FAILURE;
}
else
{
printf("Probiha nacitani slov do slovniku...\n");
}

while (fgets(buffer, sizeof(buffer), file))
{
size_t length = strlen(buffer);

if (length > 0)
*(buffer + length - 1) = '�';

if (!line)
{
g_words = (char **)calloc(ato­i(buffer), sizeof(char ));
}
else if (length > 0)
{
printf("Load: %s\n", buffer);
*(g_words + g_totalWords) = (char *)calloc(length, sizeof(char));
memcpy(
(g_words + g_totalWords), buffer, length);
++g_totalWords;
}
++line;
}

fclose(file);
return EXIT_SUCCESS;
}

void unloadWords()
{
if (g_words)
{
int i;
for (i = 0; i < g_totalWords; ++i)
{
free(*(g_words + i));
}
free(g_words);
}
}

int constainsWord(const char* word)
{
int i;

if (!g_words || !word)
return EXIT_FAILURE;

for (i = 0; i < g_totalWords; ++i)
{
if (!strcmp(*(g_words + i), word))
return EXIT_SUCCESS;
}
}

int main(int argc, char** argv)
{
// deklarace a initializace promennych
char slovo [1024], temp [1024], p;
int error = 0;

if (loadWords("slov­nik.txt") == EXIT_FAILURE)
return EXIT_FAILURE;

printf(":: SLOVNI FOTBAL ::\n");
printf("-> tady budou pravidla hry\n");

// nacitani znaku/slov z konzole a cela logika

printf("Zadej pismeno, jimz bude hra zacinat: ");
scanf("%s", temp);
p = temp[0];
int hrac = 1;
do {
printf("Hrac %d -> Zadej slovo: ", hrac);
scanf("%s", slovo);
if (p != slovo[0]) {
printf("Slovo nezacina znakem '%c'\n", p);
error++;
} else if (constainsWord("") != EXIT_FAILURE) {
printf("Slovo neni ve slovniku!\n");
error++;
}
if (error > 0) {
printf("Vitezem se stava hrac %d.\n", hrac == 1?2:1);
break;
} else {
p = slovo[strlen(slovo) - 1];
if (hrac == 1) {
hrac++;
} else {
hrac = 1;
}
}
} while (error <= 0);
printf("Pokracuj stiskem klavesy... ");
unloadWords();
return EXIT_SUCCESS;
}

 
Nahoru Odpovědět  -2 9.12.2013 16:29
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na jaroslav.bena
Petr Nymsa:

Použij tlačítko vložit kód, tenhle blivajs nikdo číst nebude

Nahoru Odpovědět  +2 9.12.2013 16:37
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na jaroslav.bena
Zdeněk Pavlátka:

Zapoměl jsi na ikonku Vložit zdrojový kód.

Nahoru Odpovědět 9.12.2013 16:40
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
jaroslav.bena:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static char** g_words = NULL;
static int g_totalWords = 0;
{
FILE *fr;

    fr = fopen("slovnik.txt", "r");
    char buffer[1024];
    int line = 0;

    if (!file)
    {
        printf("Soubor se nepodarilo otevrit nebo neexistuje!");
        return EXIT_FAILURE;
    }
    else
    {
        printf("Probiha nacitani slov do slovniku...\n");
    }

    while (fgets(buffer, sizeof(buffer), file))
    {
        size_t length = strlen(buffer);

        if (length > 0)
            *(buffer + length - 1) = '�';

        if (!line)
        {
            g_words = (char **)calloc(atoi(buffer), sizeof(char *));
        }
        else if (length > 0)
        {
            printf("Load: %s\n", buffer);
            *(g_words + g_totalWords) = (char *)calloc(length, sizeof(char));
            memcpy(*(g_words + g_totalWords), buffer, length);
            ++g_totalWords;
        }
        ++line;
    }

    fclose(file);
    return EXIT_SUCCESS;
}

void unloadWords()
{
    if (g_words)
    {
        int i;
        for (i = 0; i < g_totalWords; ++i)
        {
            free(*(g_words + i));
        }
        free(g_words);
    }
}

int constainsWord(const char* word)
{
    int i;

    if (!g_words || !word)
        return EXIT_FAILURE;

    for (i = 0; i < g_totalWords; ++i)
    {
        if (!strcmp(*(g_words + i), word))
            return EXIT_SUCCESS;
    }
}

int main(int argc, char** argv)
{
    // deklarace a initializace promennych
char slovo [1024], temp [1024], p;
    int error = 0;

    if (loadWords("slovnik.txt") == EXIT_FAILURE)
        return EXIT_FAILURE;

    printf(":: SLOVNI FOTBAL ::\n");
    printf("-> tady budou pravidla hry\n");

    // nacitani znaku/slov z konzole a cela logika

printf("Zadej pismeno, jimz bude hra zacinat: ");
    scanf("%s", temp);
    p = temp[0];
    int hrac = 1;
    do {
        printf("Hrac %d -> Zadej slovo: ", hrac);
        scanf("%s", slovo);
        if (p != slovo[0]) {
            printf("Slovo nezacina znakem '%c'\n", p);
            error++;
        } else if (constainsWord("") != EXIT_FAILURE) {
            printf("Slovo neni ve slovniku!\n");
            error++;
        }
        if (error > 0) {
            printf("Vitezem se stava hrac %d.\n", hrac == 1?2:1);
            break;
        } else {
            p = slovo[strlen(slovo) - 1];
            if (hrac == 1) {
                hrac++;
            } else {
                hrac = 1;
            }
        }
    } while (error <= 0);
    printf("Pokracuj stiskem klavesy... ");
    unloadWords();
    return EXIT_SUCCESS;
}
 
Nahoru Odpovědět 9.12.2013 16:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.