Tom's Guide > Forum > Programmation > Langage C
Langage C - Programmation
TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour,

Depuis plusieurs mois je fais du C et la j'ai voulu réaliser un carnet d'adresse en C console.
Mais j'ai un probléme, c'est quand je compile le programme et que je le test, tout marche comme je veux sauf arrivée au niveau de "l'adresse", dés que je met un espace dans ce que je rentre, aprés sa beug tout le reste. J'ai éssaié avec plusieur compilateur t'elle que code::block, Dev-C++, Visual basic C++, et j'ai toujours le même probléme, est ce que quelqu'un serait pourquoi ça me fait sa ?

Merci

------------------------------ http://handi-decouverte.site.voila.fr
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Bonjour,
Est-ce qu'on pourrait voir le code source s'il vous plait ?

Répondre à zoizoboules

t'as bien utilisé des gets et puts pour récupérer et afficher les adresses ?

Répondre à gryphus71

voici le code

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "adresse.h"
  5. double ajout(char nom, char prenom, char adresse, char ville, char codePostal, char telephone);
  6. double recherche(char nom, char prenom, char adresse, char ville, char codePostal, char telephone);
  7. int main()
  8. {
  9.     long menu = 0;
  10.     char prenom[100], nom[100], adresse[1000], ville[50], codePostal = 0, telephone = 20;
  11.     FILE* fichier = NULL;
  12.     printf("\t\t\tC A R N E T  D ' A D R E S S E\n\n\n" );
  13.     printf("1. Ajout d'adresse\n" );
  14.     printf("2. Recherche d'adresse\n" );
  15.     printf("3. Quitter\n" );
  16.     printf("\n" );
  17.     printf("Votre choix : " );
  18.     scanf("%ld", &menu);
  19.     switch (menu)
  20.     {
  21.     case 1 :
  22.     fichier = fopen("adresse.txt", "w" );
  23.     if (fichier =! NULL)
  24.     {
  25.       ajout(nom, prenom, adresse, ville, codePostal, telephone);
  26.     }
  27.     else
  28.     {
  29.       printf("Impossible d'ouvrir le fichier adresse.txt" );
  30.     }
  31.     break;
  32.     case 2 :
  33.     recherche(nom, prenom, adresse, ville, codePostal, telephone);
  34.     break;
  35.     case 3 :
  36.     break;
  37.     default :
  38.     printf("\nMauvaise entree\n\n" );
  39.     break;
  40.     }
  41.     return 0;
  42. }



Code :
  1. double ajout(char nom, char prenom, char adresse, char ville, char codePostal, char telephone)
  2. {
  3.   printf("\n" );
  4.   printf("Nom : " );
  5.   scanf("%s", nom);
  6.   printf("Prénom : " );
  7.   scanf("%s", prenom);
  8.   printf("Adresse : " );
  9.   scanf("%s", adresse);
  10.   printf("Code postal : " );
  11.   scanf("%ld", codePostal);
  12.   printf("\n" );
  13.   printf("Ville : " );
  14.   scanf("%s", ville);
  15.   printf("\n" );
  16.   printf("Telephone : " );
  17.   scanf("%ld", telephone);
  18.   return 0;
  19. }
  20. double recherche(char nom, char prenom, char adresse, char ville, char codePostal, char telephone)
  21. {
  22.   printf("Nom : " );
  23.   scanf("%s", &nom);
  24.   printf("\n" );
  25.   printf("Prenom : " );
  26.   scanf("%s", &prenom);
  27.   printf("voici le résultat :\n" );
  28.   printf("%s %s\n", nom, prenom);
  29.   printf("%s\n", adresse);
  30.   printf("%ld %s", codePostal, ville);
  31.   printf("\n\n" );
  32. }



non j'ai oublié de mettre gets et puts, et c'est possible que sa vienne de ça mon beug ?

------------------------------ http://handi-decouverte.site.voila.fr
Répondre à ghost_blue

franchement j'ai pas lu ... mais j'ai vu que tu utilisais pas mal de scanf ... essaye de bannir les scanf qui presentent une faille ... officielle sous linux car si tu programmes sous linux : il te mettera une erreur à chaque utilisation de scanf ;) ... windows préfère continuer à les utiliser (boulets ? qui a dit boulets ?)

 

donc essaye déjà de les remplacer et tu verras si ca fait encore l'erreur revient nous le dire ;)

 

PS : je tiens cette info d'un de mes profs en prog + j'avais lu le rapport officiel mais je le retrouve plus ... même avec google lol


Message édité par gryphus71 le 27-05-2007 à 21:07:59
Répondre à gryphus71

ok, mais je les remplaces par quoi ?

------------------------------ http://handi-decouverte.site.voila.fr
Répondre à ghost_blue

ben tu utilises gets !

Répondre à gryphus71

ouai mais c'est pour écrire dans un fichier donc sa risque de déconner non ?

------------------------------ http://handi-decouverte.site.voila.fr
Répondre à ghost_blue

heuuu je crois qu'on s'est pas compris ^^ :
le scanf ... tu l'utilise pour récupérer une information ! tu n'utilises pas un scanf pour écrire dans un fichier ! tu utilises ... je sais plus mais c'est une autre fonction !

ben là tu utilise gets pour demander l'info à la personne au clavier, puis une fois que tu auras récupéré cette info (avec gets) tu l'écris dans le fichier avec l'autre fonction

Répondre à gryphus71

si je ne me trompe pas, pour récupérer une donnée tu as plusieurs choix, entre autre :

char DonneeVoulue[30];

/*ca c'est pour récupérer une chaine de longueur inconnue :*/
gets(DonneeVoulue);

/*ca c'est pour récupérer une chaine de longueur définie (ici 12 caractères max : 13-1=12, le -1 est pour le retour chariot '\n') :*/
fgets(DonneeVoulue, 13, stdin);

Répondre à gryphus71

vas lire ca : http://www.linux-kheops.com/doc/ma [...] 3.txt.html
lis toutela page et tu comprendras mieu ;)

Répondre à gryphus71

quand je disais, c'est pour écrire dans un fichier, je parlais de gets, merci pour le lien je l'irai tout à l'heure

------------------------------ http://handi-decouverte.site.voila.fr
Répondre à ghost_blue

gets c'est pas pour écrire dans un fichier !
tu dois confondre avec :
fputs : ca c'est pour écrire dans un fichier (enfin je crois me souvenir lol)
ou
fgets : qui est utilisé pour récupérer une donnée d'un fichier

Répondre à gryphus71

le proto de ta fonction ajout n'est pas bon, tes paramètres sont de type tableau de char :
double ajout(char* nom, char* prenom, char* adresse, char* ville, char* codePostal, char* telephone);

scanf et gets sont deux fonctions aussi dangereuses l'une que l'autre, puisqu'on ne passe pas la taille maximale du buffer (donc buffer overflow possible).
Tu peux utiliser fgets. (http://www.siteduzero.com/tuto-3-1 [...] fgets.html)


Message édité par chrisz le 28-05-2007 à 11:04:28
Répondre à chrisz

Citation :


si je ne me trompe pas, pour récupérer une donnée tu as plusieurs choix, entre autre :

char DonneeVoulue[30];

/*ca c'est pour récupérer une chaine de longueur inconnue :*/
gets(DonneeVoulue);




Au secours ce code est a bannir , risque de sécurité .

Il faut utiliser fgets pour les saisies clavier , point barre.

------------------------------ powered by gentoo

 

Répondre à defaultuser

Ô_ô
si vous faites du dynamique : vous ne pourvez pas connaitre la taille du texte saisi à l'avance !
c'est juste qu'il faut faire attention d'utiliser la fonction la + appropriée !

Répondre à gryphus71
Tom's Guide > Forum > Programmation > Langage C
Aller à :

Il y a 2139 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens