Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
3697 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème en compilation avec c++....

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème en compilation avec c++....

n°368187
tonio_10
Posté le 22-04-2003 à 09:59:32  profilanswer
 

Bon voila, je dois rendre un projet qui consiste à faire un carnet d'adresse sous C++, on doit aussi pouvoir extraire des adresses mail d'un texte mais bon j'en suis pas encore là....
 
Le prob c'est que là mon prog ne marche pas chez moi alors qu'à l'école je pouvais l'exécuter, peut être est-ce parce ke j'ai installé une bibliothèque de mon école. Enfin lors de l'éxécution j'ai le mess : "ce prog va être arreter car opération non conforme etc....." savez vous pkoi ???
Voici ce ke j'ai fait jusqu'à présent :
 
#include "stdafx.h"
#include "math.h"
#include "biblio.h"
#include "iostream.h"
#include "string.h"
 
 
 
 
typedef struct  
{
 char ident[30];
 int tcontact;
 char nom[20];
 char pre[20];
 char adr[100];
 char ville[20];
 int cp;
 char pays[20];
 char boite[30];
 char heb[10];
 char ext[5];
 int valide;
} contact;
 
void sauvez_sur_fichier(contact*carnet,int dim)
{
 FILE*fichier;
 fichier=fopen("projet info","w+" );
 fwrite(carnet,sizeof(contact),dim,fichier);
 fclose(fichier);
}
 
void lire_sur_fichier(contact*carnet,int dim)
{
 FILE*fichier;
 int num;
 fichier=fopen("projet info","r+" );
 num=fread(carnet,sizeof(contact),dim,fichier);
 cout<<num<<endl;
 fclose(fichier);
}
 
 
/* Fonction servant à saisir chaque champ de la zone pointée */
 
void saisie(contact *pt)
{
 cout<<"Identificateur"<<endl<<flush;
 cin>>(*pt).ident;
 //cout<<"Type de contact"<<endl<<flush;
 //cin>>(*pt).tcontact;
 cout<<"Nom"<<endl<<flush;
 cin>>(*pt).nom;
 cout<<"Prenom"<<endl<<flush;
 cin>>(*pt).pre;
 //cout<<"Adresse"<<endl<<flush;
 //cin>>(*pt).adr;
 //cout<<"Ville"<<endl<<flush;
 //cin>>(*pt).ville;
 //cout<<"Code postal"<<endl<<flush;
 //cin>>(*pt).cp;
 //cout<<"Pays"<<endl<<flush;
 //cin>>(*pt).pays;
 //cout<<"Pays"<<endl<<flush;
 //cin>>(*pt).pays;
 cout<<"Boite"<<endl<<flush;
 cin>>(*pt).boite;
 cout<<"Hebergeur"<<endl<<flush;
 cin>>(*pt).heb;
 cout<<"Ext"<<endl<<flush;
 cin>>(*pt).ext;
 //cout<<"Validite "<<endl<<flush;
 (*pt).valide=1;
 
}
 
void initialisation(contact carnet[],int l)
{
 int i;
 for (i=0;i<l;i++)
 {
  carnet[i].tcontact=-1;
  strcpy(carnet[i].ident , "" );
  strcpy(carnet[i].boite ,"" );
  strcpy(carnet[i].heb , "" );
  strcpy(carnet[i].ext , "" );
  carnet[i].valide=0;
 }
}
 
 
 void affstr(contact *pt)
{
 
 cout<<"NOM          "<<(*pt).nom<<endl<<flush;
 cout<<"PRENOM          "<<(*pt).pre<<endl<<flush;
 cout<<"BOITE E-MAIL          "<<(*pt).boite<<"@"<<(*pt).heb<<"."<<(*pt).ext<<endl<<flush;
 
}
 
 
 
void vider_le_tableau(contact t[], int dim)   /* ne sert à rien car la fct affstr le fait déjà*/
{
 
 int i;
 for (i=0;i<dim;i++)
 {
  t[i].valide=0;
 }
}
 
int validation (contact *pt)    /* Fonction pour savoir s'il y a ou non un contact dans une case donnée */
 
{ int c;
 c=0;
 do
 {
  c=c+1;
 }while((*pt).valide==1);
 return c;
 
}
 
 
 
 
 
void affichage (contact carnet[],int a)     /* Fonction qui sert à afficher les contacts */
 { int i;
 for(i=0;i<a;i++)
 {
  if (carnet[i].valide!=0)
  {
   cout<<carnet[i].ident<<endl;
   cout<<carnet[i].boite<<"@";
   cout<<carnet[i].heb<<".";
   cout<<carnet[i].ext<<endl;
 
 
  }
 }
}
 
void modifier (contact t[], int dimension)
 {
  contact *pt;
  char nom[100];
  int i,a;
  pt=t;
  cout<<"entrez le nom de la personne que vous souhaitez modifier"<<endl;
  cin>>nom;
  i=0;
  while (strcmp(nom,(*pt).ident)!=0)  /*  strcmp est un outil de comparaison (voir cours)  
  Tant que le nom qu'on a entré et le nom que l'on veut modifier sont différents, on passe dans la boucle  */
   {
    pt++;
    i=i+1;
   };
 
 cout<<"Taper le numéro correspondant au menu pour lequel vous souhaitez modifier quelque chose."<<endl;
 cout<<"1 - Identification"<<endl ;
 cout<<"2 - Boite"<<endl ;
 cout<<"3 - Hebergeur"<<endl;
 cout<<"4 - Ext"<<endl;
 
 cin>>a;
 
 switch(a)
 {
 case 1:
  {
   char  nom[30];
   cout<<"Entrer le nouveau nom"<<endl;
   cin>>nom;
   strcpy((*pt).ident,"nom" );
  break;
  }
 case 2:
  {
   char  boite[10];
   cout<<"Entrer la nouvelle boite e-mail"<<endl;
   cin>>boite;
   strcpy((*pt).ident,"boite" );
  break;
  }
 case 3:
  {
   char heb[20];
   cout<<"Entrer le nouvel hébergeur correspondant à votre boite mail"<<endl;
   cin>>heb;
   strcpy((*pt).ident,"heb" );
  break;
  }
 case 4:
  {
   char ext[5];
   cout<<"Entrer l'extension de votre voite mail"<<endl;
   cin>>ext ;
   strcpy((*pt).ext,"ext" ) ;
 
  break;
  }
 }
 
   
     
   
 }
 
 
 
int menu(contact carnet[], int dim)
{
 cout<<"QUE VOULEZ VOUS FAIRE ?"<<endl;
 cout<<" 0 - Sortir du programme"<<endl;
 cout<<" 1 - Saisir un nouveau contact"<<endl;
 cout<<" 2 - Affichage "<<endl;
 cout<<" 3 - Modifier "<<endl;
 cout<<" 4 - Suppression d'un nouveau contact "<<endl;
 cout<<" 5 - Suppression d'un doublon "<<endl;
 
 int n;
 cin>>n;
 switch(n)
 {
 
 
 case 0:
  {
   break;
  }
 
 case 1:
  {
   saisie (carnet+1);
   break;
  }
 case 2:
  {
   affichage(carnet+1,100);
   break;
  }
 case 3:
  {
   modifier(carnet+1,100);
   break;
  }
 }
 case 4 :
  {
   supprimer(carnet+1,100);
   break;
  }
 return n;
}
 
 
 
 
 
 
 
 
 
 
void supprimer (contact t[], int dim)   /* Fonction servant à supprimer un contact */
 {
  contact *pt;
  char nom[100];
  int i;
  pt=t;
  cout<<"Entrer le nom de la personne que vous souhaitez supprimer de votre liste de contacts"<<endl;
  cin>>nom;
  i=0;
  while (strcmp(nom,(*pt).ident)!=0)  
   {
    pt++;
    i=i+1;
   };
   
 (*(pt)).valide=0;
   
     
   
 }
 
 
 
 
 
 
 
 
void main()
{
 
 
 
 
 
 
 contact carnet[100];
 
// vider_le_tableau(carnet,100);  
 initialisation(carnet,100);
 
 
 lire_sur_fichier(carnet,100);
 
 
 int n;
 
 do  
 {
  n=menu(carnet,5);
 
 }
 while (n != 0);
 
 
 
 
 sauvez_sur_fichier(carnet,100);
 
 
 
 
 
 
 
 
 
}
 
 
 


---------------
Be myself, I have nothing to prove...
mood
Publicité
Posté le 22-04-2003 à 09:59:32  profilanswer
 

n°368192
tonio_10
Posté le 22-04-2003 à 10:08:08  profilanswer
 

Je comprend pas j'arrive à le compiler, mais lors de l'éxécution voici ce ke j'ai :
PROJECT INFO SPé a causé une défaillance de page dans
 le module PROJECT INFO SPé.EXE à 0167:0040248c.
Registres :
EAX=00000000 CS=0167 EIP=0040248c EFLGS=00010202
EBX=00560000 SS=016f ESP=006692c8 EBP=006692ec
ECX=00006a40 DS=016f ESI=8168eb68 FS=4dff
EDX=00006a40 ES=016f EDI=00669358 GS=0000
Octets à CS : EIP :
8b 48 0c 81 e1 0c 01 00 00 85 c9 74 0b 8b 55 14  
État de la pile :
0042e2d8 00669358 8168eb68 00560000 00000000 00006a40 00006a40 006693b8 0042a01c 00669358 00401173 006693b8 00000110 00000064 00000000 0066fdf8  
 


---------------
Be myself, I have nothing to prove...
n°368195
skeye
Posté le 22-04-2003 à 10:13:40  profilanswer
 

Ca ressemble à un pb de mémoire ca...Je me permets de remttre ton code  pour le lire un peu mieux:

Code :
  1. #include "stdafx.h"
  2. #include "math.h"
  3. #include "biblio.h"
  4. #include "iostream.h"
  5. #include "string.h"
  6. typedef struct 
  7. {
  8. char ident[30];
  9. int tcontact;
  10. char nom[20];
  11. char pre[20];
  12. char adr[100];
  13. char ville[20];
  14. int cp;
  15. char pays[20];
  16. char boite[30];
  17. char heb[10];
  18. char ext[5];
  19. int valide;
  20. } contact;
  21. void sauvez_sur_fichier(contact*carnet,int dim)
  22. {
  23. FILE*fichier;
  24. fichier=fopen("projet info","w+" );
  25. fwrite(carnet,sizeof(contact),dim,fichier);
  26. fclose(fichier);
  27. }
  28. void lire_sur_fichier(contact*carnet,int dim)
  29. {
  30. FILE*fichier;
  31. int num;
  32. fichier=fopen("projet info","r+" );
  33. num=fread(carnet,sizeof(contact),dim,fichier);
  34. cout<<num<<endl;
  35. fclose(fichier);
  36. }
  37. /* Fonction servant à saisir chaque champ de la zone pointée */
  38. void saisie(contact *pt)
  39. {
  40. cout<<"Identificateur"<<endl<<flush;
  41. cin>>(*pt).ident;
  42. //cout<<"Type de contact"<<endl<<flush;  
  43. //cin>>(*pt).tcontact;  
  44. cout<<"Nom"<<endl<<flush;
  45. cin>>(*pt).nom;
  46. cout<<"Prenom"<<endl<<flush;
  47. cin>>(*pt).pre;
  48. //cout<<"Adresse"<<endl<<flush;  
  49. //cin>>(*pt).adr;  
  50. //cout<<"Ville"<<endl<<flush;  
  51. //cin>>(*pt).ville;  
  52. //cout<<"Code postal"<<endl<<flush;  
  53. //cin>>(*pt).cp;  
  54. //cout<<"Pays"<<endl<<flush;  
  55. //cin>>(*pt).pays;  
  56. //cout<<"Pays"<<endl<<flush;  
  57. //cin>>(*pt).pays;  
  58. cout<<"Boite"<<endl<<flush;
  59. cin>>(*pt).boite;
  60. cout<<"Hebergeur"<<endl<<flush;
  61. cin>>(*pt).heb;
  62. cout<<"Ext"<<endl<<flush;
  63. cin>>(*pt).ext;
  64. //cout<<"Validite "<<endl<<flush;  
  65. (*pt).valide=1;
  66. }
  67. void initialisation(contact carnet[],int l)
  68. {
  69. int i;
  70. for (i=0;i<l;i++)
  71. {
  72. carnet[i].tcontact=-1;
  73. strcpy(carnet[i].ident , "" );
  74. strcpy(carnet[i].boite ,"" );
  75. strcpy(carnet[i].heb , "" );
  76. strcpy(carnet[i].ext , "" );
  77. carnet[i].valide=0;
  78. }
  79. }
  80. void affstr(contact *pt)
  81. {
  82. cout<<"NOM          "<<(*pt).nom<<endl<<flush;
  83. cout<<"PRENOM          "<<(*pt).pre<<endl<<flush;
  84. cout<<"BOITE E-MAIL          "<<(*pt).boite<<"@"<<(*pt).heb<<"."<<(*pt).ext<<endl<<flush;
  85. }
  86. void vider_le_tableau(contact t[], int dim)   /* ne sert à rien car la fct affstr le fait déjà*/
  87. {
  88. int i;
  89. for (i=0;i<dim;i++)
  90. {
  91. t[i].valide=0;
  92. }
  93. }
  94. int validation (contact *pt)    /* Fonction pour savoir s'il y a ou non un contact dans une case donnée */
  95. { int c;
  96. c=0;
  97. do
  98. {
  99. c=c+1;
  100. }while((*pt).valide==1);
  101. return c;
  102. }
  103. void affichage (contact carnet[],int a)     /* Fonction qui sert à afficher les contacts */
  104. { int i;
  105. for(i=0;i<a;i++)
  106. {
  107. if (carnet[i].valide!=0)
  108. {
  109.   cout<<carnet[i].ident<<endl;
  110.   cout<<carnet[i].boite<<"@";
  111.   cout<<carnet[i].heb<<".";
  112.   cout<<carnet[i].ext<<endl;
  113. }
  114. }
  115. }
  116. void modifier (contact t[], int dimension)
  117. {
  118. contact *pt;
  119. char nom[100];
  120. int i,a;
  121. pt=t;
  122. cout<<"entrez le nom de la personne que vous souhaitez modifier"<<endl;
  123. cin>>nom;
  124. i=0;
  125. while (strcmp(nom,(*pt).ident)!=0)  /*  strcmp est un outil de comparaison (voir cours)   
  126. Tant que le nom qu'on a entré et le nom que l'on veut modifier sont différents, on passe dans la boucle  */
  127.   {
  128.    pt++;
  129.    i=i+1;
  130.   };
  131. cout<<"Taper le numéro correspondant au menu pour lequel vous souhaitez modifier quelque chose."<<endl;
  132. cout<<"1 - Identification"<<endl ;
  133. cout<<"2 - Boite"<<endl ;
  134. cout<<"3 - Hebergeur"<<endl;
  135. cout<<"4 - Ext"<<endl;
  136. cin>>a;
  137. switch(a)
  138. {
  139. case 1:
  140. {
  141.   char  nom[30];
  142.   cout<<"Entrer le nouveau nom"<<endl;
  143.   cin>>nom;
  144.   strcpy((*pt).ident,"nom" );
  145. break;
  146. }
  147. case 2:
  148. {
  149.   char  boite[10];
  150.   cout<<"Entrer la nouvelle boite e-mail"<<endl;
  151.   cin>>boite;
  152.   strcpy((*pt).ident,"boite" );
  153. break;
  154. }
  155. case 3:
  156. {
  157.   char heb[20];
  158.   cout<<"Entrer le nouvel hébergeur correspondant à votre boite mail"<<endl;
  159.   cin>>heb;
  160.   strcpy((*pt).ident,"heb" );
  161. break;
  162. }
  163. case 4:
  164. {
  165.   char ext[5];
  166.   cout<<"Entrer l'extension de votre voite mail"<<endl;
  167.   cin>>ext ;
  168.   strcpy((*pt).ext,"ext" ) ;
  169. break;
  170. }
  171. }
  172. int menu(contact carnet[], int dim)
  173. {
  174. cout<<"QUE VOULEZ VOUS FAIRE ?"<<endl;
  175. cout<<" 0 - Sortir du programme"<<endl;
  176. cout<<" 1 - Saisir un nouveau contact"<<endl;
  177. cout<<" 2 - Affichage "<<endl;
  178. cout<<" 3 - Modifier "<<endl;
  179. cout<<" 4 - Suppression d'un nouveau contact "<<endl;
  180. cout<<" 5 - Suppression d'un doublon "<<endl;
  181. int n;
  182. cin>>n;
  183. switch(n)
  184. {
  185. case 0:
  186. {
  187.   break;
  188. }
  189. case 1:
  190. {
  191.   saisie (carnet+1);
  192.   break;
  193. }
  194. case 2:
  195. {
  196.   affichage(carnet+1,100);
  197.   break;
  198. }
  199. case 3:
  200. {
  201.   modifier(carnet+1,100);
  202.   break;
  203. }
  204. }
  205. case 4 :
  206. {
  207.   supprimer(carnet+1,100);
  208.   break;
  209. }
  210. return n;
  211. }
  212. void supprimer (contact t[], int dim)   /* Fonction servant à supprimer un contact */
  213. {
  214. contact *pt;
  215. char nom[100];
  216. int i;
  217. pt=t;
  218. cout<<"Entrer le nom de la personne que vous souhaitez supprimer de votre liste de contacts"<<endl;
  219. cin>>nom;
  220. i=0;
  221. while (strcmp(nom,(*pt).ident)!=0) 
  222.   {
  223.    pt++;
  224.    i=i+1;
  225.   };
  226.  
  227. (*(pt)).valide=0;
  228. }
  229. void main()
  230. {
  231. contact carnet[100];
  232. // vider_le_tableau(carnet,100);   
  233. initialisation(carnet,100);
  234. lire_sur_fichier(carnet,100);
  235. int n;
  236. do 
  237. {
  238. n=menu(carnet,5);
  239. }
  240. while (n != 0);
  241. sauvez_sur_fichier(carnet,100);
  242. }


Message édité par skeye le 22-04-2003 à 10:16:40
n°368205
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-04-2003 à 10:21:17  profilanswer
 

Avec tous les pointeurs et tableaux que tu as, ça ne m'étonnerait pas que tu finisses par écrire ou lire là ou il ne faut pas. J'ai pas le temps de me parser ton source, mais vérifie bien si tu ne débordes pas d'un tableau ou si tu n'utilises pas un pointeur fou.
 
Une astuce : quand tu as ce genre de message d'erreur, utilise un débugger qui t'affiche le source désassemblé.
En effet, il faut savoir que le registre EIP contient l'adresse de la prochaine instruction a exécuter. Ainsi, pour trouver la ligne qui pose problème, utilise un désassembleur ou un débugger adéquat, puis positionne toi à l'adresse indiquée par EIP. Pour peu que tu aies activé les options de débuggage, tu tombes sur l'équivalent assembleur de ton source C pile à l'endroit où l'erreur se produit. A toi ensuite de remonter et de trapper le bug.


---------------
J'ai un string dans l'array (Paris Hilton)
n°368207
VisualC++
J'va y penser ...
Posté le 22-04-2003 à 10:22:42  profilanswer
 

Aussi un truc si ton fichier "projet info" n'existe pas tu crashes comem tu test pas sa presence.


Message édité par VisualC++ le 22-04-2003 à 10:23:04
n°368925
ToxicAveng​er
Tatatatakae ! Otaking !!!!!!
Posté le 22-04-2003 à 22:10:35  profilanswer
 

c pas terrible de melanger du C et du C++, choisis un des 2 langages une fois pour toute... on sait pas trop en quel langage tu code la, c'est un peu normal que ca marche pas... :pfff:
 
Edit: la t'es plus proche du C que du C++
En C++ tu devrais faire une classe avec ses accesseurs...


Message édité par ToxicAvenger le 22-04-2003 à 22:13:01

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème en compilation avec c++....

 

Sujets relatifs
[Q-Basic] petit probleme dans la compilation :(Tomcat - IntelliJ - problème de compilation de JSP
[C/gcc] Problème à la compilation louche[Collection] Compilation ok mais execution probleme!
Problème de compilationProblème GCC : pas d'éxécutable, ni d'erreur en fin de compilation
[Java]Problème de compilation avec Jext et java en ligne de commandeprobleme de compilation sous emacs
[Fortran] [Matlab] Problème de compilationInterdependance de class => probleme de compilation
Plus de sujets relatifs à : Problème en compilation avec c++....


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR