"Violation d'acces lors de l'ecriture" - C++ - Programmation
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
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é
Marsh Posté le 22-10-2006 à 18:36:35
Zoltan87 a écrit : En mode debug, il plante apres la ligne |
regarde bien cette ligne ...... il y a un truc qui devrait t'interpeller dedans
Marsh Posté le 22-10-2006 à 18:37:57
a oui .. comme nommer la variable apellée par %s (merci Kadreg)
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)
Marsh Posté le 22-10-2006 à 18:41:43
a quoi sert l'operateur == (et donc != par la même occasion)
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.
Marsh Posté le 22-10-2006 à 18:49:17
perdu
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 )
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
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 =
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
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é