Pendu

Le problème exposé dans ce sujet a été résolu.

Et tu fais ça toujours pour n'importe quel projet ? beaucoup de fonctions et un main ?

Je suis pas hyper expérimenté, mais oui, je fais ça pour tout.

Mais toi tu l'as fait un peu différemment non ? tu l'as fait avec de l'allocation dynamique ?

Oui, j’utilise de l’allocation dynamique. Voici ma fonction loadBook et ce qui va avec.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
FILE *loadFile(const char path[])
{
    FILE *file = fopen(path, "r");
    if(NULL == file)
        perror("Erreur chargement file dictionnaire ");
    return file;
}

struct s_book *loadBook(void)
{
    struct s_book *book = malloc(sizeof(book));
    if(NULL == book)
        perror("Erreur malloc struct s_book ");
    else
    {
        FILE *file = loadFile(PATH);
        book->words = NULL;
        if(NULL == file)
            book = freeBook(book);
        else
        {
            if(loadWords(book, file) < 0)
                book = freeBook(book);
            fclose(file);
        }
    }
    return book;
}

int loadWords(struct s_book *const book, FILE *const file)
{
    size_t i = 0;
    fscanf(file, "%u%*[^\n]", &book->size);
    book->words = malloc(book->size * sizeof(*book->words));
    if(book->words == NULL)
    {
        perror("Erreur malloc ");
        return -1;
    }
    for(i = 0; i < book->size; i++)
        fscanf(file, "%50s%*[^\n]", book->words[i]);
    return 0;
}

Dans ma fonction loadWords, je lis le nombre de mots en première ligne du fichier, puis j’alloue la mémoire pour les book->size chaînes de caractères, et enfin, je lis ces chaînes de caractères.

+0 -0

Ah oui d'ac, j'aurai pas réussi à faire ça, book - > .. ça correspond à quoi ? je veux dire les flèches , c'est par rapport à la structure non ? j'ai déjà vu ça il me semble mais j'ai oublié, je l'ai jamais utilisé.

D'ailleurs je savais pas qu'on pouvait faire des fonctions structures;

D'ailleurs j'ai une autre question, srand(time(NULL)); correspond à quoi ?

D'ailleurs j'avais oublié mais je voulais te demander si tu connaissais de bon sites pour apprendre la SDL car j'aimerais faire des petits jeux pour m'entrainer à coder :D , parce que j'ai vu que tu étais en train de faire un tuto sdl donc tu dois ty connaitre :p

Salut,

1
fscanf(file, "%u%*[^\n]", &book->size);

Je vois des retours de fonctions qui ne sont pas vérifiés. :pirate:
Par ailleurs, attention que le format %*[^\n] n'est pas suffisant pour vidanger le tampon d'entrée (il reste le \n final) et que celui-ci ne sera pas appliqué si lz première conversion échoue.

+1 -0

Ah oui d'ac, j'aurai pas réussi à faire ça, book - > .. ça correspond à quoi ? je veux dire les flèches , c'est par rapport à la structure non ? j'ai déjà vu ça il me semble mais j'ai oublié, je l'ai jamais utilisé.

book->size est équivalent à (*book).size c’est-à-dire qu’on accède au champ size de l’objet pointé par book. Regarde ici.

D'ailleurs je savais pas qu'on pouvait faire des fonctions structures;

Ce ne sont pas des fonctions structures. C’est juste que la fonction renvoie une structure. Tout comme une fonction peut renvoyer un int ou un pointeur sur int, elle peut renvoyer une structure ou un pointeur sur structure.

D'ailleurs j'ai une autre question, srand(time(NULL)); correspond à quoi ?

srand permet d’initialiser la génération de nombres aléatoires grâce à la « graîne » qu’on lui donne en argument.

D'ailleurs j'avais oublié mais je voulais te demander si tu connaissais de bon sites pour apprendre la SDL car j'aimerais faire des petits jeux pour m'entrainer à coder :D , parce que j'ai vu que tu étais en train de faire un tuto sdl donc tu dois ty connaitre :p

Pour le moment, niveau SDL 2, il n’y a pas (je pense) de bons tutoriels complets, il faut fouiller un peu partout et s’appuyer sur la doc. D’ailleurs, c’est sur la documentation que je m’appuie le plus pour écrire (même si en ce moment, c’est un peu la page blanche sur ce tutoriel). :(

Je vois des retours de fonctions qui ne sont pas vérifiés. :pirate:
Par ailleurs, attention que le format %*[^\n] n'est pas suffisant pour vidanger le tampon d'entrée (il reste le \n final) et que celui-ci ne sera pas appliqué si lz première conversion échoue.

Je ne le referais plus. :'( Non, disons que j’ai préféré considérer que si le fichier est là, il a le bon formatage et sera bien lu, mais c’est vrai que ce serait mieux de vérifier.

Conclusion : pour avoir raison, il faut être d’accord avec Taurre. ^^

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte