Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 18/11/2012, à 13:16

Shanx

Re : /* Topic des codeurs [8] */

Gnagnagna...

J'ai corrigé l'indentation, par contre pour découper le main je vais attendre que le programme fonctionne...

/**** PENDU ****/

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

#define TAILLE_MAX 50

void clean_stdin(void);

int main(void){
    int i; /* compteur */
    int j=0; /* Compteur de coups faux */
    int k; /* compteur qui s'incrémente si la lettre proposée est dans le mot */
    int l; /* compteur qui vérifie si on est au premier tour ou non */
    char mot[TAILLE_MAX]="";
    char caractereLu;
    int numMotChoisi, nombreMots;
    nombreMots = 0;

    FILE* fichier = NULL;
    fichier = fopen("mots.txt", "r");
    /* On vérifie que le fichier existe */
    if (fichier == NULL){
        printf("Impossible d'ouvrir le fichier mots.txt");
        return 0;
    }

    // On compte le nombre de mots dans le fichier (il suffit de compter les entrées \n
    while((caractereLu=fgetc(fichier)) != EOF){
        if (caractereLu == '\n'){
            nombreMots++;
        }
    }
    printf("Le num de mot est %d\n", nombreMots);

    srand(time(NULL));
    numMotChoisi = (rand() % nombreMots); /* On choisit une ligne aléatoirement */

    printf("Le num choisi est %d\n", numMotChoisi);

    /* On prend le mot choisi */
    rewind(fichier);
    while (numMotChoisi > 0){
        caractereLu = fgetc(fichier);
        if (caractereLu == '\n')
        numMotChoisi--;
    }

    fgets(mot, TAILLE_MAX, fichier);
    printf("%s", mot); 
    fclose(fichier);
    mot[strlen(mot) - 1] = '\0';

    int longueurMot = strlen(mot);
    char t[longueurMot]; /* tableau des lettres à deviner */
    char lettre; /* lettre entrée par l'user */
    int z=0; /* z != 0 quand l'user trouve le bon mot */
    char lettresTestees[26]; /*ensemble des lettres déjà testées */

    /* On remplace les lettres par des _ */
    for(i=0 ; i < longueurMot ; i++){
        t[i] = '_';
    }

    while (z != longueurMot){
        /* Affichage du mot à trouver avec le cas échéant les lettres déjà trouvées */                
        puts("Le mot à deviner est : ");
        for(i=0 ; i < longueurMot ; i++){
            printf("%c ", t[i]);
        }
        puts("\n");

        /* Affichage des lettres déjà testées */
        if (l!=0){
            puts("Les lettres déjà testées sont : ");
            for(i=0 ; i < j ; i++){
                printf("%c ", lettresTestees[i]);
            }
        }
        puts("\n");

        while(!islower(lettre)){
            puts("Quelle lettre proposes-tu ?");
            lettre=getchar();
        }
        lettresTestees[l]=lettre; /* On entre la lettre dans le tableau des lettres testées */
        clean_stdin();
        for(i=0 ; i < longueurMot ; i++){
            if(lettre ==  mot[i]){ /* Si la lettre est présente dans le mot */
                t[i] = lettre; /* On remplace les _ correspondants par la lettre */
                k++; 
            }
            else{
                j++; /* Sinon on incrémente le compteur de coups faux */
            }
        }
        l++; /* l devient différent de 0 car ce n'est plus le premier tour */

        if (k==0){
            puts("Dommage !\n"); /* si la lettre n'était pas dans le mot */
        }
        
        for (i=0; i<longueurMot ; i++) { /* On vérifie qu'on a pas trouvé le mot entier */
            if (t[i] == mot[i])
                z++;
            else {
                z = 0;
            }
        }
    }
    puts("Bravo !");
    return 0;
}

void clean_stdin(void){
    int c;

    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
}

J'ai quelques problème : là quelque soit la lettre que je rentre, il considère que j'ai rentré la même lettre qu'au premier tour. Genre si je rentre f, ensuite quoique je rentre il prendra f. Pour corriger ça il faut que j'utilise clean_stdin, mais alors le comportement devient complètement erratique... hmm
Ensuite la partie d'affichage des caractères déjà testés déconne joliment aussi...

$ ./pendu             
Le num de mot est 3
Le num choisi est 2
lievre
Le mot à deviner est : 
_ _ _ _ _ _ 



Quelle lettre proposes-tu ?
f
Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
f      

e
Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
f f          ~ 

z
Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
f f f         ~       

z
Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
f f f f        ~             

f
Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
f f f f f       ~               @    

j
Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
f f f f f f      ~               @      l i e v 


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
f f f f f f f     ~               @      l i e v r e     

Oui, la réponse apparaît toute seule si on appuie plusieurs fois sur entrée... hmm

Dernière modification par Shanx (Le 18/11/2012, à 13:19)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#27 Le 18/11/2012, à 13:18

Pylades

Re : /* Topic des codeurs [8] */

Shanx a écrit :

Gnagnagna...

Je sais que c’est frustrant, mais si tu n’es pas rigoureux dès le départ, je ne vois pas quand tu le deviendras…

Shanx a écrit :

J'ai corrigé l'indentation, par contre pour découper le main je vais attendre que le programme fonctionne...

Voilà typiquement le genre de phrases qui font peur… hmm


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#28 Le 18/11/2012, à 13:21

Shanx

Re : /* Topic des codeurs [8] */

Πυλάδης a écrit :
Shanx a écrit :

Gnagnagna...

Je sais que c’est frustrant, mais si tu n’es pas rigoureux dès le départ, je ne vois pas quand tu le deviendras…

Shanx a écrit :

J'ai corrigé l'indentation, par contre pour découper le main je vais attendre que le programme fonctionne...

Voilà typiquement le genre de phrases qui font peur… hmm

J'ai édité mon post.

Moi ça me parait logique d'optimiser après que ça marche, non ? Parce que sinon ce serait s'éparpiller, étant donné que pour séparer le main y'a quelques trucs que je ne sais pas faire... (Genre faire une fonction qui a un fichier déjà ouvert en argument).


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#29 Le 18/11/2012, à 13:21

tshirtman

Re : /* Topic des codeurs [8] */

Oui, découper est souvent le moyen le plus rapide de s'en sortir, et que ça fonctionne, justement.

Hors ligne

#30 Le 18/11/2012, à 13:24

Pylades

Re : /* Topic des codeurs [8] */

Shanx a écrit :

Moi ça me parait logique d'optimiser après que ça marche, non ?

Mais ce n’est pas de l’optimisation, c’est de la clarté de base !
C’est comme pour ton buffer overflow, ce n’était pas de l’optimisation, mais de la sécurité de base.

Shanx a écrit :

(Genre faire une fonction qui a un fichier déjà ouvert en argument).

Où est le problème ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#31 Le 18/11/2012, à 13:28

The Uploader

Re : /* Topic des codeurs [8] */

Quand on parle d'optimisation, c'est optimiser les performances (usage I/O, mémoire, CPU). Le reste ça ne s'appelle pas de l'optimisation, mais être propre et rigoureux.


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#32 Le 18/11/2012, à 13:41

Shanx

Re : /* Topic des codeurs [8] */

Nouveau code, qui ne fonctionne toujours pas :

/**** PENDU ****/

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

#define TAILLE_MAX 50

void clean_stdin(void);
char* choixMot(FILE* fichier);

int main(void){
    int i; /* compteur */
    int j=0; /* Compteur de coups faux */
    int k; /* compteur qui s'incrémente si la lettre proposée est dans le mot */
    int l; /* compteur qui vérifie si on est au premier tour ou non */
    char* mot;

    FILE* fichier = NULL;
    fichier = fopen("mots.txt", "r");
    /* On vérifie que le fichier existe */
    if (fichier == NULL){
        printf("Impossible d'ouvrir le fichier mots.txt");
        return 0;
    }

    mot=choixMot(fichier);

    int longueurMot = strlen(mot);
    char t[longueurMot]; /* tableau des lettres à deviner */
    char lettre; /* lettre entrée par l'user */
    int z=0; /* z != 0 quand l'user trouve le bon mot */
    char lettresTestees[26]; /*ensemble des lettres déjà testées */

    /* On remplace les lettres par des _ */
    for(i=0 ; i < longueurMot ; i++){
        t[i] = '_';
    }

    while (z != longueurMot){
        /* Affichage du mot à trouver avec le cas échéant les lettres déjà trouvées */                
        puts("Le mot à deviner est : ");
        for(i=0 ; i < longueurMot ; i++){
            printf("%c ", t[i]);
        }
        puts("\n");

        /* Affichage des lettres déjà testées */
        if (l!=0){
            puts("Les lettres déjà testées sont : ");
            for(i=0 ; i < j ; i++){
                printf("%c ", lettresTestees[i]);
            }
        }
        puts("\n");

        while(!islower(lettre)){
            puts("Quelle lettre proposes-tu ?");
            lettre=getchar();
        }
        lettresTestees[l]=lettre; /* On entre la lettre dans le tableau des lettres testées */
        clean_stdin();
        for(i=0 ; i < longueurMot ; i++){
            if(lettre ==  mot[i]){ /* Si la lettre est présente dans le mot */
                t[i] = lettre; /* On remplace les _ correspondants par la lettre */
                k++; 
            }
            else{
                j++; /* Sinon on incrémente le compteur de coups faux */
            }
        }

        l++; /* l devient différent de 0 car ce n'est plus le premier tour */

        if (k==0){
            puts("Dommage !\n"); /* si la lettre n'était pas dans le mot */
        }
        
        for (i=0; i<longueurMot ; i++) { /* On vérifie qu'on a pas trouvé le mot entier */
            if (t[i] == mot[i])
                z++;
            else {
                z = 0;
            }
        }
    }
    puts("Bravo !");
    return 0;
}

void clean_stdin(void){
    int c;

    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
}

char* choixMot(FILE* fichier){
    char mot[TAILLE_MAX]="";
    char caractereLu;
    int numMotChoisi, nombreMots;
    nombreMots = 0;
    // On compte le nombre de mots dans le fichier (il suffit de compter les entrées \n
    while((caractereLu=fgetc(fichier)) != EOF){
        if (caractereLu == '\n'){
            nombreMots++;
        }
    }
    printf("Le num de mot est %d\n", nombreMots);

    srand(time(NULL));
    numMotChoisi = (rand() % nombreMots); /* On choisit une ligne aléatoirement */

    printf("Le num choisi est %d\n", numMotChoisi);

    /* On prend le mot choisi */
    rewind(fichier);
    while (numMotChoisi > 0){
        caractereLu = fgetc(fichier);
        if (caractereLu == '\n')
        numMotChoisi--;
    }

    fgets(mot, TAILLE_MAX, fichier);
    printf("%s", mot); 
    fclose(fichier);
    mot[strlen(mot) - 1] = '\0';
    return mot;
}

Déjà j'ai une erreur à la compilation :

pendu.c: In function ‘choixMot’:
pendu.c:131:5: warning: function returns address of local variable [enabled by default]

Ensuite ça se comporte très bizarrement...

$ ./pendu             
Le num de mot est 3
Le num choisi est 1
maison
Le mot à deviner est : 
_ _ _ _ _ _ 



Quelle lettre proposes-tu ?
r
Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r K n    

m
Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r n       W V  


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r       W V        


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r      W V              


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r     W V               J n    


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r    W V               J n      P J n  


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r   W V               J n      P J n        


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r  W V               J n      P J n              


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r W V               J n      P J n                    


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r V               J n      P J n                       J n  


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r               J n      P J n                       J n         


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r              J n      P J n                       J n         L      


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r             J n      P J n                       J n         L            


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r            J n      P J n                       J n         L             r     


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r           J n      P J n                       J n         L             r         Z  


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r          J n      P J n                       J n         L             r         `    \    


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r         J n      P J n                       J n         L             r         f    \     K n    


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r        J n      P J n                       J n         L             r         l    \     K n          


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r       J n      P J n                       J n         L             r         r    \     K n                


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r      J n      P J n                       J n         L             r         x    \     K n                      


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r     J n      P J n                       J n         L             r         ~    \     K n                        =    


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r    J n      P J n                       J n         L             r             \     K n                        =          


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r   J n      P J n                       J n         L             r             \     K n                        =               K 


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r  J n      P J n                       J n         L             r             \     K n                        =               K n      


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r J n      P J n                       J n         L             r             \     K n                        =               K n            


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r r n      P J n                       J n         L             r             \     K n                        =               K n               @  


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r r r      P J n                       J n         L             r             \     K n                        =               K n               @        


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r r r r     P J n                       J n         L             r             \     K n                        =               K n               @              


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r r r r r    P J n                       J n         L             r             \     K n                        =               K n               @               W   u ! 


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r   P J n                       J n         L             r              @   K n                        =               K n               @               W   u ! c 


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r  P J n                       J n         L             r             @       K                        =               K n               @               W   u ! c 


Dommage !

Le mot à deviner est : 
_ _ _ _ _ _ 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r P J n                       J n         L             r             @       K n                      =               K n               @               W   u ! c 


Dommage !

Le mot à deviner est : 
r r r r r r 

Les lettres déjà testées sont : 
r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r J n                       J n         L             r !           @       K n                      =               K n               @               W   u ! c 


Dommage !

zsh: segmentation fault  ./pendu

Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#33 Le 18/11/2012, à 13:59

nathéo

Re : /* Topic des codeurs [8] */

Salut o/

Dites est-ce qu'il y en a ici qui savent comment avoir un équivalent du main() en ruby ? big_smile


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#34 Le 18/11/2012, à 14:00

grim7reaper

Re : /* Topic des codeurs [8] */

Un peu comme en Python :

if __FILE__ == $PROGRAM_NAME
  # Put "main" code here
end

Ou

if __FILE__ == $0
  # Put "main" code here
end
Shanx a écrit :

Déjà j'ai une erreur à la compilation :

pendu.c: In function ‘choixMot’:
pendu.c:131:5: warning: function returns address of local variable [enabled by default]

Normal. Tout est dans le message.
mot est déclaré dans choixMot, c’est une variable locale. Elle cesse d’exister à la sortie de la fonction, et toi tu renvoies son adresse (les tableaux, pour des raisons de performances, sont toujours passé par adresse, pas par valeur). Donc tu renvoies l’adresse d’un truc inexistant, et tu l’utilises donc forcément ça va mal se passer (d’où ton comportement bizarre).

Tu as trois solutions :
- déclarer mot en static, très moche ici. On va éviter hein :]
- allocation dynamique de mot.
- passer mot en argument (comme il est passé par adresse, il sera bien modifé).

Dernière modification par grim7reaper (Le 18/11/2012, à 14:25)

Hors ligne

#35 Le 18/11/2012, à 14:33

nathéo

Re : /* Topic des codeurs [8] */

Merci grim, mais du coup les instruction sont placés avant le end, non ?


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#37 Le 18/11/2012, à 15:14

:!pakman

Re : /* Topic des codeurs [8] */

tongue


...

Hors ligne

#38 Le 18/11/2012, à 15:23

nathéo

Re : /* Topic des codeurs [8] */

Parfois suivre la logique peut jouer un mauvais tour... tongue

Dernière modification par nathéo (Le 18/11/2012, à 15:23)


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#39 Le 18/11/2012, à 16:31

xapantu

Re : /* Topic des codeurs [8] */

grim7reaper a écrit :
xapantu a écrit :
afilmore a écrit :

Il y a parfois quelques bugs dans les bindings, toujours quelques warnings pendant la compilation du code C mais ça c'est rien par rapport aux messages de "déprécation" des mecs de GTK+. mad

Boarf, ça se discute, une fois que tu as quelques dizaines de milliers de lignes de code, il y a quand même pas mal de warning tongue

Pas si tu codes proprement…
Tu peux en avoir quelques uns ouais, si ta ligne de compil’ est super stricte, mais sinon c’est que tu codes de manière un peu à l’arrache.

Je parlais du code en C généré par valac, pas de code directement en C, hein tongue (à moins que toi aussi ?)

Hors ligne

#40 Le 18/11/2012, à 16:40

Rolinh

Re : /* Topic des codeurs [8] */

nathéo a écrit :

Parfois suivre la logique peut jouer un mauvais tour... tongue

Ça ne concerne même pas la logique là, juste le bon sens. C'est comme si tu demandais si tu devais mettre le contenu de tes fonctions C après la paire d'accolades...

Hors ligne

#41 Le 18/11/2012, à 16:49

grim7reaper

Re : /* Topic des codeurs [8] */

xapantu a écrit :
grim7reaper a écrit :
xapantu a écrit :

Boarf, ça se discute, une fois que tu as quelques dizaines de milliers de lignes de code, il y a quand même pas mal de warning tongue

Pas si tu codes proprement…
Tu peux en avoir quelques uns ouais, si ta ligne de compil’ est super stricte, mais sinon c’est que tu codes de manière un peu à l’arrache.

Je parlais du code en C généré par valac, pas de code directement en C, hein tongue (à moins que toi aussi ?)

Non j’étais à côté de la plaque, j’ai répondu un peu vite ^^

Hors ligne

#42 Le 18/11/2012, à 17:11

The Uploader

Re : /* Topic des codeurs [8] */

nathéo a écrit :

Merci grim, mais du coup les instruction sont placés avant le end, non ?

Juste ce qu'il faut pour lancer le bordel est dans le if qui sert de "bootstrap", ça t'empêche pas d'être propre.

(just sayin')


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#43 Le 18/11/2012, à 18:36

nathéo

Re : /* Topic des codeurs [8] */

Au du coup pour remplacer argc/argv on fait comment exactement ? (mes recherches sur le net ne m'aident pas beaucoup neutral )


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#44 Le 18/11/2012, à 18:45

afilmore

Re : /* Topic des codeurs [8] */

The Uploader a écrit :

Le défi actuel est toujours :bah voui, faut croire que les défis sont secondaires :-P

grim7reaper a écrit :

Je propose la mise au point d’une bibliothèque ou d’un module ou truc du genre (faut que le code soit réutilisable ailleurs quoi) qui propose des fonctions pour récupérer des quotes sur Internet.

Vous êtes libre de choisir les sites que vous voulez gérez dans votre code (VDM, DTC, PEBKAC, etc.), au niveau de leur nombre (gestion d’un seul site ou de plusieurs) aussi et au niveau des options offertes (par exemple, pour VDM vous pouvez soit toujours tirer une quote aléatoire soit offrir la possibilité de choisir sa catégorie).

Le seul truc que je fixe c’est le format de sortie : vos fonctions doivent fournir au final juste la quote en texte simple.
Comme ça, c’est plus souple pour la réutilisation ou la combinaison avec d’autres trucs (pour donner des trucs comme ça par exemple).

Défi relevé tongue

https://github.com/afilmore/vdm-get

git clone git://github.com/afilmore/vdm-get.git
cd vdm-get
sudo apt-get install libglib2.0-dev libxml2-dev
./autogen.sh && ./configure --prefix=/usr && make
./src/vdm-get

Il faut autoconf, automake, vala et surement d'autres trucs que j'ai oublié de préciser. tongue

Le programme récupère une page sur VDM, enregistre le contenu dans /tmp/vdm.html,
et récupère un post aléatoire qui sera sauvegardé au format texte dans $HOME/vdm.txt

Voili. tongue

Hors ligne

#45 Le 18/11/2012, à 18:56

The Uploader

Re : /* Topic des codeurs [8] */

nathéo a écrit :

Au du coup pour remplacer argc/argv on fait comment exactement ? (mes recherches sur le net ne m'aident pas beaucoup neutral )

The Pragmatic Programmer's Guide a écrit :

ARGV

Any command-line arguments after the program filename are available to your Ruby program in the global array ARGV. For instance, invoking Ruby as

% ruby -w ptest "Hello World" a1 1.6180

yields an ARGV array containing ["Hello World", a1, 1.6180]. There's a gotcha here for all you C programmers---ARGV[0] is the first argument to the program, not the program name. The name of the current program is available in the global variable $0.

Ruby and it's world
Ruby stdlib : OptionParser

Dernière modification par The Uploader (Le 18/11/2012, à 18:56)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#46 Le 18/11/2012, à 18:57

grim7reaper

Re : /* Topic des codeurs [8] */

nathéo a écrit :

Au du coup pour remplacer argc/argv on fait comment exactement ? (mes recherches sur le net ne m'aident pas beaucoup neutral )

Toi, soit tu cherches pas vraiment, soit il faut vraiment que tu apprennes à utiliser un moteur de recherche -___-"
Comme en Perl (sans les sigil), avec le tableau ARGV.

Édit : grilled, de peu, mais grilled.



@afilmore : je vais jeter un œil wink
Ça serait mieux qu’il affiche sur stdout plutôt que d’écrire dans un fichier (si on veut vraiment un fichier, suffit de faire une redirection).

Édit : hum hmm

/tmp/vdm.html:161: element div: validity error : ID ad_leaderboard already defined
<div id="ad_leaderboard"><div class="leaderboard"><script type="text/javascript"
                        ^
/tmp/vdm.html:219: HTML parser error : htmlParseEntityRef: expecting ';'
w.amazon.fr/LAgenda-VDM-2012-2013-Didier-Guedj/dp/2350761231/?_encoding=UTF8&tag
                                                                               ^
/tmp/vdm.html:219: HTML parser error : htmlParseEntityRef: expecting ';'
M-2012-2013-Didier-Guedj/dp/2350761231/?_encoding=UTF8&tag=viedemerd-21&linkCode
                                                                               ^
/tmp/vdm.html:219: HTML parser error : htmlParseEntityRef: expecting ';'
013-Didier-Guedj/dp/2350761231/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid
                                                                               ^
/tmp/vdm.html:219: HTML parser error : htmlParseEntityRef: expecting ';'
/dp/2350761231/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338913477&camp
                                                                               ^
/tmp/vdm.html:219: HTML parser error : htmlParseEntityRef: expecting ';'
761231/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338913477&camp=1642&sr
                                                                               ^
/tmp/vdm.html:219: HTML parser error : htmlParseEntityRef: expecting ';'
ding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338913477&camp=1642&sr=8-2&creative
                                                                               ^
/tmp/vdm.html:221: HTML parser error : htmlParseEntityRef: expecting ';'
w.amazon.fr/LAgenda-VDM-2012-2013-Didier-Guedj/dp/2350761231/?_encoding=UTF8&tag
                                                                               ^
/tmp/vdm.html:221: HTML parser error : htmlParseEntityRef: expecting ';'
M-2012-2013-Didier-Guedj/dp/2350761231/?_encoding=UTF8&tag=viedemerd-21&linkCode
                                                                               ^
/tmp/vdm.html:221: HTML parser error : htmlParseEntityRef: expecting ';'
013-Didier-Guedj/dp/2350761231/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid
                                                                               ^
/tmp/vdm.html:221: HTML parser error : htmlParseEntityRef: expecting ';'
/dp/2350761231/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338913477&camp
                                                                               ^
/tmp/vdm.html:221: HTML parser error : htmlParseEntityRef: expecting ';'
761231/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338913477&camp=1642&sr
                                                                               ^
/tmp/vdm.html:221: HTML parser error : htmlParseEntityRef: expecting ';'
ding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338913477&camp=1642&sr=8-2&creative
                                                                               ^
/tmp/vdm.html:225: HTML parser error : htmlParseEntityRef: expecting ';'
http://www.amazon.fr/Vie-merde-Tome-En-bagnole/dp/287442773X/?_encoding=UTF8&tag
                                                                               ^
/tmp/vdm.html:225: HTML parser error : htmlParseEntityRef: expecting ';'
ie-merde-Tome-En-bagnole/dp/287442773X/?_encoding=UTF8&tag=viedemerd-21&linkCode
                                                                               ^
/tmp/vdm.html:225: HTML parser error : htmlParseEntityRef: expecting ';'
-Tome-En-bagnole/dp/287442773X/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid
                                                                               ^
/tmp/vdm.html:225: HTML parser error : htmlParseEntityRef: expecting ';'
/dp/287442773X/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338971760&camp
                                                                               ^
/tmp/vdm.html:225: HTML parser error : htmlParseEntityRef: expecting ';'
42773X/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338971760&camp=1642&sr
                                                                               ^
/tmp/vdm.html:225: HTML parser error : htmlParseEntityRef: expecting ';'
TF8&tag=viedemerd-21&linkCode=ur2&qid=1338971760&camp=1642&sr=8-1-spell&creative
                                                                               ^
/tmp/vdm.html:226: HTML parser error : htmlParseEntityRef: expecting ';'
http://www.amazon.fr/Vie-merde-Tome-En-bagnole/dp/287442773X/?_encoding=UTF8&tag
                                                                               ^
/tmp/vdm.html:226: HTML parser error : htmlParseEntityRef: expecting ';'
ie-merde-Tome-En-bagnole/dp/287442773X/?_encoding=UTF8&tag=viedemerd-21&linkCode
                                                                               ^
/tmp/vdm.html:226: HTML parser error : htmlParseEntityRef: expecting ';'
-Tome-En-bagnole/dp/287442773X/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid
                                                                               ^
/tmp/vdm.html:226: HTML parser error : htmlParseEntityRef: expecting ';'
/dp/287442773X/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338971760&camp
                                                                               ^
/tmp/vdm.html:226: HTML parser error : htmlParseEntityRef: expecting ';'
42773X/?_encoding=UTF8&tag=viedemerd-21&linkCode=ur2&qid=1338971760&camp=1642&sr
                                                                               ^
/tmp/vdm.html:226: HTML parser error : htmlParseEntityRef: expecting ';'
TF8&tag=viedemerd-21&linkCode=ur2&qid=1338971760&camp=1642&sr=8-1-spell&creative
                                                                               ^
/tmp/vdm.html:245: element div: validity error : ID wrapper already defined
        <div id="wrapper">
                         ^

Dernière modification par grim7reaper (Le 18/11/2012, à 19:05)

Hors ligne

#47 Le 18/11/2012, à 19:12

afilmore

Re : /* Topic des codeurs [8] */

Oui, en plus des warnings de vala, on a le droit aux warnings de libxml2.
smile

On peut pas spécifier d'options avec parse_file :
http://unstable.valadoc.org/#!api=libxm … parse_file

Sinon, il faut utiliser read_doc :
http://unstable.valadoc.org/#!api=libxm … c.read_doc

Avec comme options, NOERROR, NOWARNING :
http://unstable.valadoc.org/#!api=libxm … rserOption

Mais dans ce cas, on doit lire le fichier avant dans un buffer :
read_doc (string cur, string url, string? encoding = null, int options = 0)

"cur" doit être un buffer, pas le nom du fichier html comme avec parse_file.

Voila ce que ça donne :
https://github.com/afilmore/vdm-get/com … c69f695201

Pour une raison étrange j'ai des caractères non reconnus dans le terminal, alors que dans le fichier $HOME/vdm.txt les caractères accentués posent pas de problèmes.

Edit:
Ca fonctionne, il manquait cette fonction dans les bindings Vala, donc, j'ai modifié le fichier.

Et une solution vite fait mal fait pour afficher le résultat dans un terminal sans problème de caractères accentués :
https://github.com/afilmore/vdm-get/com … 0542b3367d

tongue

VDM a écrit :

Aujourd'hui, comme depuis toujours, je ne suis pas très doué pour tout ce qui touche à l'informatique. C'est mon ex-copine qui a dû m'expliquer comment mettre mon profil Facebook en "célibataire". VDM

Excellant big_smile

Dernière modification par afilmore (Le 18/11/2012, à 22:29)

Hors ligne

#48 Le 18/11/2012, à 23:15

Rolinh

Re : /* Topic des codeurs [8] */

Tiens, à nouveau un article sur Kivy sur le planet Archlinux. Intéressant. smile

Hors ligne

#49 Le 18/11/2012, à 23:59

nathéo

Re : /* Topic des codeurs [8] */

J'ai une autre question big_smile Quand un argument est contenu dans l'une des case d'argv, il est de type char non ? Du coup, il faut le convertir en entier, si on veut s'en servir comme chiffre. Seulement quand je fais des recherches sur le net la solution que je trouve est de faire un

integer(string)

Mais d'après mes test je n'ai pas l'impression que ça fonctionne avec une case de tableau...


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#50 Le 19/11/2012, à 00:07

xapantu

Re : /* Topic des codeurs [8] */

Ça, ça va probablement te renvoyer le int, pas te modifier ton tableau wink

Hors ligne