Se connecter avec
S'enregistrer | Connectez-vous

You are not allowed to do this.

Langage C

Dernière réponse : dans Programmation

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

Autres pages sur : langage

Lassé par la pub ? Créez un compte

voici le code

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


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


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

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

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

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);

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-11181-1-c-realiser-des-saisies-securisees-grace-a-fgets.html)

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.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde