Probleme Char

romainbisson Messages postés 88 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014 - 4 juin 2008 à 15:35
romainbisson Messages postés 88 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014 - 5 juin 2008 à 10:25
Bonjour,

j'ai crée des char qui recupere des valeurs tapé par l'utilisateur :

    char nom[5000];
    char prenom[5000];
    char adresse[5000];
    char code[5000];
    char ville[5000];
    char telephone[500];
    char facture[5000];
   

printf(" Nom : ");
 scanf("%s",&nom);
 
 printf("\n Prenom : ");
 scanf("%s",&prenom);
 
 printf("\n Adresse : ");
 scanf("%s",&adresse);
 
 printf("\n Code postale : ");
 scanf("%s",&code);
 
 printf("\n Ville : ");
 scanf("%s",&ville);
 
 printf("\n Telephone : ");
 scanf("%s",&telephone);
 
    printf("\n Numero de la facture : ");
 scanf("%s",&facture);

Mais j'ai des problemes lorsque l'utilisateur tape un espace. il me saute des lignes

exemple :
si l'adresse est 3 rue leclerc

il  passe directement à telephone

Pourquoi ?

11 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 15:43
Salut

Parce que fscanf s'arrete de lire au premier espace trouvé.

Il faut donc utiliser ici:  fgets

A+
Mon site internet : http://pistol.petesampras.free.fr
0
romainbisson Messages postés 88 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014
4 juin 2008 à 15:59
oui mais moi c'est pas pour lire dans un fichier, c'est pour lire dans une console.

tu peux me donner un exemple de fgets
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 16:07
Oui effectivement c'est pour lire depuis la console. Donc utilise gets:

#include <stdio.h>




int main()
{
  char szAddr[256];
  printf ("Insert your full address: ");
  gets (szAddr);
  printf ("Your address is: %s\n",szAddr);
  return 0;
}

A+
Mon site internet : http://pistol.petesampras.free.fr
0
romainbisson Messages postés 88 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014
4 juin 2008 à 16:20
int r;
  
    char nom[5000];
    char prenom[5000];
    char adresse[5000];
    char code[5000];
    char ville[5000];
    char telephone[500];
    char facture[5000];

    Color(12,14);
 printf("---------------------------------------------------------------\n");
 printf("                        BON DE COMMANDE                        \n");
 printf("---------------------------------------------------------------\n");


 Color(1,15);
 printf("\n\n");
 
 printf(" Voulez-vous creer un bon de commande ?\n");
 printf(" OUI : 1   NON : 2 \n");
 scanf("%d",r);
 
 switch(r)
    {
      case 1:    
        
         printf(" Nom : ");
          gets (nom);

Probleme mon programme plante des que je luis met 1 pour créer un bon de commande
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 16:25
Bon la c'est une faute d'inatention dans ton scanf("%d\n",&r)

Mais en general, on lit toujours une chaine de caractere, PUIS on convertie en int si possible.

Que ce passe t'il dans ton programme si tu entres ppp au lieu de 1?

A+
Mon site internet : http://pistol.petesampras.free.fr
0
romainbisson Messages postés 88 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014
4 juin 2008 à 16:30
case 1:    
        
         printf(" Nom : ");
      gets(nom);
 
      printf("\n Prenom : ");
      gets(prenom);
 
      printf("\n Adresse : ");
      gets(adresse);
                     
         printf("\n Code postale : ");
         gets(code);
                                    
         printf("\n Ville : ");
         gets(ville);
 
         printf("\n Telephone : ");
         gets(telephone);
                       
         printf("\n Numero de la facture : ");
         gets(facture);
        
         system("cmd /c CLS" );

sa marche nikel a part que des que je rentre 1, il me saute nom et passe directement au prenom
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 17:01
Etrange.
Essaye d'ajouter un  \n pour ton premier printf
printf(" \nNom : ");

A+
Mon site internet : http://pistol.petesampras.free.fr
0
romainbisson Messages postés 88 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014
4 juin 2008 à 17:18
je l'ai fait ,

lol
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 17:28
lol
Ok, met voir tout le code ici que l'on puisse voir plus clair.

A+
Mon site internet : http://pistol.petesampras.free.fr
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
4 juin 2008 à 17:33
Essais de mettre fflush avant l'utilisation de gets.
Met stdin comme paramètre.

Ceci dit, je recommande l'utilisation de fgets qui s'assurera de ne pas déborder du tampon.
Aussi, je trouve tes tampons assez volumineux pour un simple nom, prénom, numéro de téléphone etc. 64 (128 pour être sûr) caractères pour un nom, par exemple, devrait être suffisant.

C++ (@++)<!--
0
romainbisson Messages postés 88 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014
5 juin 2008 à 10:25
merci

j'ai mis

fflush(stdin);

et sa fonctionne correctement
0
Rejoignez-nous