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

  FORUM HardWare.fr
  Programmation
  C++

  "Violation d'acces lors de l'ecriture"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

"Violation d'acces lors de l'ecriture"

n°1462516
Zoltan87
Posté le 22-10-2006 à 18:21:03  profilanswer
 

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é

mood
Publicité
Posté le 22-10-2006 à 18:21:03  profilanswer
 

n°1462517
kadreg
profil: Utilisateur
Posté le 22-10-2006 à 18:22:51  profilanswer
 

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 !
n°1462525
Zoltan87
Posté le 22-10-2006 à 18:33:47  profilanswer
 

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é

n°1462527
kadreg
profil: Utilisateur
Posté le 22-10-2006 à 18:36:35  profilanswer
 

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 !
n°1462528
Zoltan87
Posté le 22-10-2006 à 18:37:57  profilanswer
 

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


Message édité par Zoltan87 le 22-10-2006 à 18:40:43
n°1462531
Zoltan87
Posté le 22-10-2006 à 18:39:45  profilanswer
 

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)

n°1462532
kadreg
profil: Utilisateur
Posté le 22-10-2006 à 18:41:43  profilanswer
 

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 !
n°1462534
Zoltan87
Posté le 22-10-2006 à 18:48:08  profilanswer
 

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
n°1462535
kadreg
profil: Utilisateur
Posté le 22-10-2006 à 18:49:17  profilanswer
 

perdu :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°1462537
Zoltan87
Posté le 22-10-2006 à 18:50:06  profilanswer
 

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

mood
Publicité
Posté le 22-10-2006 à 18:50:06  profilanswer
 

n°1462563
Zoltan87
Posté le 22-10-2006 à 19:41:31  profilanswer
 

quelqu'un peut m'aider ...

n°1462571
Amonchakai
Posté le 22-10-2006 à 20:00:46  profilanswer
 

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

n°1462598
Zoltan87
Posté le 22-10-2006 à 20:44:09  profilanswer
 

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
n°1462609
Amonchakai
Posté le 22-10-2006 à 21:04:01  profilanswer
 

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 =

n°1462612
Amonchakai
Posté le 22-10-2006 à 21:08:19  profilanswer
 

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

n°1462615
Zoltan87
Posté le 22-10-2006 à 21:11:38  profilanswer
 

merci beaucoup Amonchakai


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

  "Violation d'acces lors de l'ecriture"

 

Sujets relatifs
accès le plus rapide à une disquette?Socket, problème à l'écriture.
Interdire l'accès a un dossier sauf a un scriptMP3 - Lecture/Ecriture ID3tag
gestion de stocks et acces concurrents ?[wsh]WMI et methode qui ne fonctionne pas
Modification chemin accès dans macro par userformscript permission d acces
gestion des accès de plusieurs utilisateurs au même mRécupérer droits d'accès sur un fichier ou un répertoire
Plus de sujets relatifs à : "Violation d'acces lors de l'ecriture"


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