IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

prg a resoudre !!!!!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut prg a resoudre !!!!!
    salut je fait du moins j'essaie de faire un programme ( pour les cours ) qui devra : demander a l'utilisateur de saisir 10 noms de pays
    ensuite, affichera un par un chaque nom de pays et demander a l'utilisateur si oui ou non il veut modifier leur orthographe. A présent mon problème: il s'exécute parfaitement mais ma boucle d'affichage ne passe pas d'un élément a l'autre mais 2 par 2 donc j'aimerais avoir votre avis, merci d'avance


    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    44
    #include <stdio.h>
    #include <conio.h>
    void remplir(char*,int,int);
    void modif(char*,int,int);
    void main()
    {
    	char liste[10][50];
    	int i,nbre_ligne=10,nbre_car=50;
    	clrscr();
       remplir(&liste[0][0],nbre_ligne,nbre_car);
       clrscr();
       modif(&liste[0][0],nbre_ligne,nbre_car);
    	getch();
    }
    void remplir(char* liste,int nbre_ligne,int nbre_car)
    {
    	int i;
    	for(i=0;i<nbre_ligne;i++)
       {
          	printf("Entre le nom d'un pays : ");
             scanf("%s",(liste+i*nbre_car));
       }
       clrscr();
    }
    void modif(char* liste,int nbre_ligne,int nbre_car)
    {
    	int i,c;
       for(i=0;i<nbre_ligne;i++)
       {
          clrscr();
       	printf("nom du pays : %s",(liste+i*nbre_car));
          printf("\n\n\n\tvoulez-vous modifier son orthographe (o/n) : ");
          scanf("%c",&c);
          if(c=='o'||c=='O')
          {
          	printf("nouvelle orthographe du pays : ");
             scanf("%s",(liste+i*nbre_car));
             clrscr();
             printf("MODIFIE AVEC SUCCES...PRESS <ENTER>");
             getch();
          }
       }
       clrscr();
    }
    ps: les directives sont que je devais utiliser un maximum de fonction.

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Ton programme ne marche pas chez moi.

    1. La fonction main retourne toujours un int, c'est à dire :
    2. return 0; ou return EXIT_SUCCESS à la fin de main, c'est mieux.

    3. conio.h n'est pas portable.

    4. C'est peu lisible.

    5. Utilises fgets et sscanf à la place de scanf car tu l'utilises mal.

    Je ne pourrais pas t'aider à resoudre ton problème tant que tu utiliseras conio.h

    Kr00pS

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: prg a resoudre !!!!!
    Citation Envoyé par M.a.n.u.
    demander a l'utilisateur de saisir 10 noms de pays
    Pour aider à la saisie, on devrait voir le numero de la saisie en cours.
    ensuite, affichera un par un chaque nom de pays et demander a l'utilisateur si oui ou non il veut modifier leur orthographe. A présent mon problème: il s'exécute parfaitement mais ma boucle d'affichage ne passe pas d'un élément a l'autre mais 2 par 2 donc j'aimerais avoir votre avis, merci d'avance
    Un problème de stabilité dû au scanf() ?

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    • main() retourne int. Toujours.
      http://emmanuel-delahaye.developpez....s.htm#typemain
    • le 'i' de main() n'est pas utilisé.
    • scanf() avec "%c" attend l'adresse d'un char et non d'un int. Attention. scanf() est mal utilisé. Il est préférable de faire les saisies à coup de fgets().

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Kr00pS
    Je ne pourrais pas t'aider à resoudre ton problème tant que tu utiliseras conio.h
    Essaye <conio2.h>

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Kr00pS
    Je ne pourrais pas t'aider à resoudre ton problème tant que tu utiliseras conio.h
    Essaye <conio2.h>
    Cela ne marche pas !

    Je crois que je n'ai pas conio.h dans mes includes

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Kr00pS
    Je crois que je n'ai pas conio.h dans mes includes
    Possible. Tu utilises Code::Blocks sous Windows ?

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Kr00pS
    Je crois que je n'ai pas conio.h dans mes includes
    Possible. Tu utilises Code::Blocks sous Windows ?
    Oui et pourtant je n'ai rien modifié (j'ai pris le pack avec le compilateur).

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Kr00pS
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Kr00pS
    Je crois que je n'ai pas conio.h dans mes includes
    Possible. Tu utilises Code::Blocks sous Windows ?
    Oui et pourtant je n'ai rien modifié (j'ai pris le pack avec le compilateur).
    Curieux. Avec Code::Blocks 1.0 RC2, j'ai conio2... Essaye de télécharger le devpack...

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    C'est fait et en compilant le code, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Project   : forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\projects\Console\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    Linking console executable: C:\dev\projects\Console\forums\forums.exe
    .objs\main.o:main.c:(.text+0x48): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0x6f): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0xdf): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0xff): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0x171): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0x191): more undefined references to `clrscr' follow
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 1 seconds)
    Je ne comprends pas la :/

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Kr00pS
    C'est fait et en compilant le code, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Project   : forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\projects\Console\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    Linking console executable: C:\dev\projects\Console\forums\forums.exe
    .objs\main.o:main.c:(.text+0x48): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0x6f): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0xdf): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0xff): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0x171): undefined reference to `clrscr'
    .objs\main.o:main.c:(.text+0x191): more undefined references to `clrscr' follow
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 1 seconds)
    Oui, il manque le header (messages du compilateur) et la bibliothèque (messages du linker).

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Si je compile le code du dessus avec conio.h ça me met que le header n'est pas présent et avec conio2.h ça me met ça :/

  12. #12
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Kr00pS
    Si je compile le code du dessus avec conio.h ça me met que le header n'est pas présent et avec conio2.h ça me met ça :/[/code]
    Alors il faut ajouter libconio.a au projet (-lconio)

  13. #13
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Merci, cela marche maintenant.

    De toute façon, je ne voyais pas l'utilité de cette header vu que ce n'est pas portable;

  14. #14
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut
    pour votre gouverne j'utilise comme compilateur le borland sous windows vous l'avez bien compris et donc dans mon cas au lieu du scanf j'utilise fgets car gets ne verifie pas si on sorte tu vecteur... dites moi si la syntaxe est correcte "fgets(liste,sizeof ligne,stdin);" ? pour le problème kroops

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Utilises fgets et sscanf à la place de scanf car tu l'utilises mal. 
    Je ne pourrais pas t'aider à resoudre ton problème tant que tu utiliseras conio.h
    pour fgets c'est oké mais le "sscanf" je ne percoit pas bien sont utilisation. donc je v enlever conio.h mais dites moi comment effacé l'écran ?????

  15. #15
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut
    alors mon problème de boucle dans la fonction modif est du a cela ????? quand vous dites header c'est de fonction que vous parlez ????

  16. #16
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Pour ta boucle, je ne sais pas vu que j'ai du mal à comprendre le code (oui commentaire powaa).

    Pour scanf; Lis ceci : http://emmanuel-delahaye.developpez....tes.htm#saisie

    Il y a un exemple de l'utilisation de fgets + sscanf.

    Pour effacer l'ecran, tu peux faire sans (au pire regarde dans la FAQ C de ce site il y a une fonction portable je crois).

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Kr00pS
    De toute façon, je ne voyais pas l'utilité de cette header vu que ce n'est pas portable;
    Bah, il n'est pas interdit d'écrire du code non portable. Par contre, il est important de le savoir (que ce n'est pas portable).

    Ceci dit, il s'agit plutôt de code non standard. En effet, la portabilité peut être assurée, notamment entre le conio d'origine (Borland / MS-DOS) et le conio que l'on trouve sur Dev-C++, puis sur Code::Blocks. On peut regretter le choix des développeurs d'avoir changé le nom du header (<conio2.h>), mais c'est sans doute pour des raisons historiques... (Il y a eu un <conio.h> sur Dev-C++...) Peu importe.

    Il faut noter que ce portage a consisté à reproduire les fonctions d'origine pour qu'elles fonctionnent dans la console Win32, ce qui est déjà une belle réussite. Il faut savoir que conio a un lourd passé (Antérieur à Linux), puisqu'on retrouve les mêmes fonctions sur PC depuis les années 80 et l'apparition de Turbo Pascal 3.0 par le même Borland. Lorsque que Borland a sorti son Turbo C, il a repris les fonctions de gestion d'écran (même noms, même interfaces, même comportements) sous la forme 'conio' que l'on connait.

    Depuis, des millions d'applications 'plein ecran' ont été développées sur PC/MS-DOS, puis, grâce au portage, sur console WIN32.

    On ne peut pas effacer ça d'un trait de plume !

  18. #18
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par M.a.n.u.
    donc dans mon cas au lieu du scanf j'utilise fgets car gets ne verifie pas si on sorte tu vecteur... dites moi si la syntaxe est correcte "fgets(liste,sizeof ligne,stdin);" ? pour le problème kroops
    Un peu étrange ! En supposant que 'ligne' est un tableau de char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       fgets (ligne, sizeof ligne, stdin);
    Citation Envoyé par Kr00ps
    Utilises fgets et sscanf à la place de scanf car tu l'utilises mal.
    Je ne pourrais pas t'aider à resoudre ton problème tant que tu utiliseras conio.h
    pour fgets c'est oké mais le "sscanf" je ne percoit pas bien sont utilisation.
    Ca peut servir à extraire des données de la ligne de texte saisie.
    donc je v enlever conio.h mais dites moi comment effacé l'écran ?????
    Il n'y a pas de réponse standard... Tu peux faire
    mais c'est un peu bricolo... Sous Windows, c'est OK.

    La vrai question est "as-tu besoin d'effacer l'écran ?"

  19. #19
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Kr00pS
    De toute façon, je ne voyais pas l'utilité de cette header vu que ce n'est pas portable;
    Bah, il n'est pas interdit d'écrire du code non portable. Par contre, il est important de le savoir (que ce n'est pas portable).

    Ceci dit, il s'agit plutôt de code non standard. En effet, la portabilité peut être assurée, notamment entre le conio d'origine (Borland / MS-DOS) et le conio que l'on trouve sur Dev-C++, puis sur Code::Blocks. On peut regretter le choix des développeurs d'avoir changé le nom du header (<conio2.h>), mais c'est sans doute pour des raisons historiques... (Il y a eu un <conio.h> sur Dev-C++...) Peu importe.

    Il faut noter que ce portage a consisté à reproduire les fonctions d'origine pour qu'elles fonctionnent dans la console Win32, ce qui est déjà une belle réussite. Il faut savoir que conio a un lourd passé (Antérieur à Linux), puisqu'on retrouve les mêmes fonctions sur PC depuis les années 80 et l'apparition de Turbo Pascal 3.0 par le même Borland. Lorsque que Borland a sorti son Turbo C, il a repris les fonctions de gestion d'écran (même noms, même interfaces, même comportements) sous la forme 'conio' que l'on connait.

    Depuis, des millions d'applications 'plein ecran' ont été développées sur PC/MS-DOS, puis, grâce au portage, sur console WIN32.

    On ne peut pas effacer ça d'un trait de plume !
    Je sais qu'il n'est pas interdit d'écrire du code non portable, mais je pense qu'il y a toujours moyen de faire sans et ça donne des perspectives d'avenir pour le programme.

    Merci pour ces précisions, je ne le savais pas.

  20. #20
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Kr00pS
    Je sais qu'il n'est pas interdit d'écrire du code non portable, mais je pense qu'il y a toujours moyen de faire sans et ça donne des perspectives d'avenir pour le programme.
    'toujours' est un peu fort ! On fait ce qu'on peut... On ne peut qu'encourager les initiatives 'tierces' qui s'efforcent de rendre l'ecriture des applications portables. (GTK+, SDL etc.)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Math]resoudre un système de N équation à N inconnus
    Par Shiryu44 dans le forum Mathématiques
    Réponses: 9
    Dernier message: 15/02/2005, 17h41
  2. Débutant : prg une infobulle
    Par Chris74 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/12/2004, 14h09
  3. [prg jeux ]Définir l'intersection de deux rectangles
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 30/07/2003, 18h11
  4. Comment commenter ses prg pr que ses collègues comprennent ?
    Par GFA dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 02/05/2003, 14h19
  5. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo