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

Bibliothèque standard C Discussion :

Problème fgets dans D D D


Sujet :

Bibliothèque standard C

  1. #1
    Invité
    Invité(e)
    Par défaut Problème fgets dans D D D
    bonjour!
    Je deviens fou sur un bug que me donne DDD avec les lectures sur stdin.


    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
    int main( int argc, char *argv[] )
    {
    	char command[1024];
     
     
     
     
    	printf("Comandos: \nr: resuelve el nombre de un host\n"
    		"i: devuelve el nombre correspondiente a una IP\n"
    		"m: devuelve los nombres de servidores de correo de un dominio\n"
    		"c: cambia el sevidor de nombres a una nueva IP\n"
    		"exit: salir del cliente dns\n\n");
     
     
    		//interactif
    		printf("> ");
     
    // L'ERREUR SE PRODUIT ICI \/ 
    		fgets(command, 1024, stdin); 
     
    		while(strncmp(command, "exit\n", sizeof("exit\n"))!=0)
    		{
    			if(process(command))
    			{
    				printf("Sintaxa del comando incorrecta\n");
    			}
    			printf("> "); fflush(stdin);
    			fgets(command, 1024, stdin);
    		}
     
     
     
    	return 0;
    }

    Ce qu'il se passe, c'est que lorsque j'execute le programme avec DDD,
    lors du fgets, DDD insere sur stdin : "1\n"
    au lieu de me laisser taper ma commande.
    Je n'ai pas encore très bien compris la logique.
    Cela arrive sur différentes machines.
    Cela n'arrive pas seulement avec fgets mais aussi avec fgetc ou getline.
    Cela arrive même lorsque je fais un fflush.
    Cela n'arrive pas avec gdb en ligne de commande.
    Cela arrive aussi avec d'autres sources, mais pas forcément tout le temps.
    Je ne sais vraiment quoi à quoi ça peut être du.
    Des pistes? J'ai ducoup commencé à débuguer avec Nemiver, avec lequel je n'ai pas cette erreur, qui est pas mal du tout... mais bon, j'aimerai qmm faire fonctionner ddd...

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 126
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Je ne me rappelle pas avoir remarquer ce problème avec DDD. Du coup je vais vous conseiller la reinstallation .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par thenano Voir le message
    bonjour!
    Je deviens fou sur un bug que me donne DDD avec les lectures sur stdin.
    ...
    Ce qu'il se passe, c'est que lorsque j'execute le programme avec DDD,
    lors du fgets, DDD insere sur stdin : "1\n"
    au lieu de me laisser taper ma commande.
    Je n'ai pas encore très bien compris la logique.
    Cela arrive sur différentes machines.
    Cela n'arrive pas seulement avec fgets mais aussi avec fgetc ou getline.
    Cela arrive même lorsque je fais un fflush.
    Cela n'arrive pas avec gdb en ligne de commande.
    Cela arrive aussi avec d'autres sources, mais pas forcément tout le temps.
    Je ne sais vraiment quoi à quoi ça peut être du.
    Des pistes? J'ai ducoup commencé à débuguer avec Nemiver, avec lequel je n'ai pas cette erreur, qui est pas mal du tout... mais bon, j'aimerai qmm faire fonctionner ddd...
    A voir, mais sans doute normal ...

    ddd a une fenêtre de commande et lis donc stdin via une boucle comme la tienne...

    Vu qu'il ajoute également un prompt, ça doit coincer quelque part..

    Mais faut voir..

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 126
    Billets dans le blog
    149
    Par défaut
    Dans mes souvenirs, la commande de prompt attendait bien les entrees pour scanf ... je testerai vite fait ce soir...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre confirmé Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Par défaut
    Aucun probleme chez moit avec ce 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    #include <string.h>
    #include <stdio.h>
     
    void filter(char *s)
    {
      *(s + strlen(s) - 1) = 0;
    }
     
    const char *opt[] = {
      "r",
      "i",
      "m",
      "c",
      0
    };
     
    int process(char *s)
    {
      int i;
     
      i = -1;
      while (opt[++i])
        if (!strcmp(opt[i], s))
          return (1);
     
      return (0);
    }
     
    int main()
    {
      char command[1024];
     
      printf("Comandos: \nr: resuelve el nombre de un host\n"
    	 "i: devuelve el nombre correspondiente a una IP\n"
    	 "m: devuelve los nombres de servidores de correo de un dominio\n"
    	 "c: cambia el sevidor de nombres a una nueva IP\n"
    	 "exit: salir del cliente dns\n\n");
     
      printf("> ");
     
      while (fgets(command, 1024, stdin))
        {
          filter(command);
     
          if (!strcmp(command, "exit"))
    	break;
     
          if (!process(command))
    	puts("Sintaxa del comando incorrecta");
     
          printf("> ");
        }
        printf("Bye.");
     
        return (0);
    }

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 126
    Billets dans le blog
    149
    Par défaut
    Pareil de mon coté, avec un code plus simpliste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
     
    int main(void)
    {
    	char truc[50]; // Si on entre plus on plante dangeuresement
     
    	printf("Entrez un truc: ");
    	scanf("%s",truc);
    	printf("Vous avez taper: '%s'\n",truc);
     
    	return 0;
    }
    Dans ddd, j'ai lancé le programme avec:
    ddd ./monProgramme
    Et puis j'ai fais run. Après, il attend une entrée venant de l'utilisateur ( moi )... et après ça continu tranquillement.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Invité
    Invité(e)
    Par défaut
    LittleWhite, pas de problème avec ton code chez moi non plus.
    IronZorg par contre, j'ai le même problème avec mon code.
    J'ai le sentiment que c'est dû au printf de juste avant. Mais je ne n'ai pas la moindre idée dans quelle mesure cela pourrait influer.
    Dernière modification par Invité ; 03/05/2010 à 16h46.

Discussions similaires

  1. Problème heure dans un formulaire
    Par Faro dans le forum Access
    Réponses: 7
    Dernier message: 15/09/2005, 11h11
  2. [ZEOSLIB] Problème Insertion dans une table
    Par moscovisci dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/06/2005, 12h05
  3. problème debodybackground dans une page php
    Par bertrand_declerck dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/02/2005, 22h39
  4. Problème alinéa dans textarea
    Par guitaros dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 23/12/2004, 00h07
  5. Problème formatage dans balise title / alt
    Par jflebegue dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 09/12/2004, 15h18

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