"Violation d'acces lors de l'ecriture"

"Violation d'acces lors de l'ecriture" - C++ - Programmation

Marsh Posté le 22-10-2006 à 18:21:03    

Bonjour a tous, voila cela fait maintenant deux jours que je fais un programme avec Visual Studio 2005 et deja apres avoir passé de longues heures a réparer tant bien que mal mes erreurs de syntaxe, lorsque je genere et qu'aucun probleme n'apparait alors, un message apparait "Exeption non gérée ... Violation d'accès lors de l'écriture". Ce probleme arrive lorsque j'indique le "code nationalite" lorsque j'y suis invité au lancement du programme. Et apres c'est donc le drame ...
Pouvez-vous m'aider s'il vous plait ?
Je vous joint mon bout de programme, je me doute que certes il est loin d'etre parfait, mais je viens de debuter :)
 
#include "stdafx.h"
#include "stdlib.h"
#include "windows.h"
 
typedef char CH15[16];
typedef char CH2[3];
typedef char CH20[21];
typedef char CH10[11];
 
struct skieur {  CH15 nom; CH2 nat;int doss; };
 
void main()
{
 int nbp=0,doss=0,i;
 skieur Tskieur[20];
 CH20 nomlu;
 CH2 nat;
 CH10 natio;
 CH2 libnat;
 i=0;
 char r;
 
// ---------------------  PHASE 1:LES INSCRIPTIONS  ---------------------  
 
 printf("Entrez un nom de candidat\n" );  
 gets_s(nomlu);
 printf("Entrez la code nationalite du candidat\n" );
 gets(nat);
 while(nomlu[0]!='*')
 {
  if(nat!="FR" || nat!="IT" || nat!="LU" || nat!="PL" || nat!="CH" )
   printf("LE CODE NATIONALITE %s EST INCONNU.\n VOTRE INSCRIPTION NE SERA PAS PRIS EN COMPTE.\n" );
  else
  {
   for(i=0; i<=nbp; i=i+1)
   {  
    if( strcmp(nomlu,Tskieur[i].nom)!=0 && strcmp(nat,Tskieur[i].nat)!=0 )
    {
     i=i+1;
     strcpy(nomlu,Tskieur[nbp].nom);
     gets_s(Tskieur[nbp].nat);
     Tskieur[nbp].doss=nbp+1;
     nbp=nbp+1;
    }
    else
     printf("candidat deja enregistre\n" );
   }//Fin du for
  }
  for(i=0;i<=nbp;i=i+1)
  {
   printf("%s %s %d\n",Tskieur[i].nom,Tskieur[i].nat,Tskieur[i].doss);
  }
  printf("Voulez-vous afficher les candidats par nationalité ? O pour OUI et N pour NON \n" );
  r=getchar();
  if(r=='O')
  {
   printf("Tapez le code nationalite\n" );
   gets_s(nat);
   if(libnat=="FR" )
    strcpy("FRANCE",natio);
   if(libnat=="IT" )
    strcpy("ITALIE",natio);
   if(libnat=="LU" )
    strcpy("LUXEMBOURG",natio);
   if(libnat=="PL" )
    strcpy("POLOGNE",natio);
   if(libnat=="CH" )
    strcpy("SUISSE",natio);
  if(nbp=0)
   printf("%s %s AUCUN INSCRIT\n",natio,libnat);  
  if(nbp>0)
  {
   for(i=0;i<=nbp;i=i+1)
   {
    if(strcmp(nat,Tskieur[i].nat)==0)
     printf("%s %s %d\n",Tskieur[i].nom,Tskieur[i].nat,Tskieur[i].doss);//ecrire ausse le libelle nationalite
    else
     printf("code nationalite inconnu\n" );
   }
  }
  }
 
  if(natio!="FR" && nat!="IT" && nat!="LU" && nat!="PL" && nat!="CH" )
   printf("CODE NATIONALITE %s INCORRECT\n",nat);
 }
 
 
// ---------------------  FIN DE LA PHASE 1  ---------------------  
 
 system("pause" );
 }//Fin du programme
 
 
 
 
 
 
 
---
Un grand merci pour vos reponses, car je me doute ue parachuter un code comme cela n'est pas agreable , je suis désolé

Reply

Marsh Posté le 22-10-2006 à 18:21:03   

Reply

Marsh Posté le 22-10-2006 à 18:22:51    

tu as le droit de le lancer en mode débug pour voir où il plante :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-10-2006 à 18:33:47    

En mode debug, il plante apres la ligne  
 
printf("LE CODE NATIONALITE %s EST INCONNU.\n VOTRE INSCRIPTION NE SERA PAS PRIS EN COMPTE.\n" );
 
pardon de ne pas l'avoir precisé

Reply

Marsh Posté le 22-10-2006 à 18:36:35    

Zoltan87 a écrit :

En mode debug, il plante apres la ligne  
 
printf("LE CODE NATIONALITE %s EST INCONNU.\n VOTRE INSCRIPTION NE SERA PAS PRIS EN COMPTE.\n" );
 
pardon de ne pas l'avoir precisé


 
regarde bien cette ligne ...... il y a un truc qui devrait t'interpeller dedans  :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-10-2006 à 18:37:57    

a oui .. comme nommer la variable apellée par %s  :ange: (merci Kadreg)


Message édité par Zoltan87 le 22-10-2006 à 18:40:43
Reply

Marsh Posté le 22-10-2006 à 18:39:45    

par contre, que je mette un code valide ou non, le programme me renvoi que le code n'est pas reconnu, j'ai essayer en tapant FR (ce qui est censé etre un code connudans mon programme)

Reply

Marsh Posté le 22-10-2006 à 18:41:43    

a quoi sert l'operateur == (et donc != par la même occasion)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-10-2006 à 18:48:08    

if(nat!="FR" || nat!="IT" || nat!="LU" || nat!="PL" || nat!="CH" )  
 
ici l'opérateur != sert a tester si la chaine de caractere nat est differente de FR,IT,LU,PL et CH auquel cas il faudrait afficher que le code candidat n'est pas bon, mais le hic c'est que meme avec un code bon (FRpar exemple), cela me dis que le code n'est pas bon.
 
== quand a lui sert a tester que termes sont egaux.


Message édité par Zoltan87 le 22-10-2006 à 18:49:28
Reply

Marsh Posté le 22-10-2006 à 18:49:17    

perdu :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-10-2006 à 18:50:06    

argh ... mais peux-tu m'aider kadreg ?

Reply

Marsh Posté le 22-10-2006 à 18:50:06   

Reply

Marsh Posté le 22-10-2006 à 19:41:31    

quelqu'un peut m'aider ...

Reply

Marsh Posté le 22-10-2006 à 20:00:46    

Salut !
   Pour comparer des char* c'est strcmp() qu'il faut utiliser. la comparaison == fait le test d'égalité entre les deux pointeurs...
   
   (mais le mieux en C++ se serait d'utiliser des string... ça te simplifirait la vie :) )

Reply

Marsh Posté le 22-10-2006 à 20:44:09    

mais comment je dois faire pour utiliser des string, peux tu m'expliquer ? merci beaucou^p.
 
Concernant strcmp() j'avais essayer mais je ne sais pas si on peux faire strcmp(nat,"FR" )=0; pour savoir si nat vaut "FR"
 
Et lorsque j'essaie if(strcmp(nat,"FR" )=0) apres quand je genere, Visual me dit : error C2106: '=' : l'opérande gauche doit être une l-value


Message édité par Zoltan87 le 22-10-2006 à 20:48:00
Reply

Marsh Posté le 22-10-2006 à 21:04:01    

ben, pour les string 2s de google et tu as ta réponse...
 
quand tu fait ton test dans le if() met == au lieu de =

Reply

Marsh Posté le 22-10-2006 à 21:08:19    

tien avec ça tu as tout ce qu'il te faut au sujet des string :
 
http://www.sgi.com/tech/stl/basic_string.html

Reply

Marsh Posté le 22-10-2006 à 21:11:38    

merci beaucoup Amonchakai

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed