Mon code plante.

Fermé
Sabbag Messages postés 1 Date d'inscription jeudi 1 novembre 2012 Statut Membre Dernière intervention 1 novembre 2012 - 1 nov. 2012 à 12:19
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 2 nov. 2012 à 18:42
Bonjour,

Voilà mon problème : J'ai un programme à faire en langage C qui jusque là ne me posait pas de problème. Mais là, il plante à un moment et je ne sais pas pourquoi, j'ai beau chercher, je vois pas :(
Merci d'avance pour ceux qui me répondront.
Voilà le code :


#include "stdio.h"
#include "stdlib.h"
#include "string.h"

typedef char CH20[21];
typedef char CH15[16];
typedef char CH2[3];

struct PERS
{
CH20 Nom;
int iCode;
int NumDoss; // //Pas utile de stocker
float Temps;
int Rang; // //Pas utile de stocker
};

struct NAT
{
CH15 Nationalite;
CH2 Code;
int PInscrits;
int NParticipants;
int NClasses;
float TpsMoyen;
};


int main ()
{
PERS TabP[20];
NAT TabN[7] = {{"ALLEMAGNE", "AL", 0, 0, 0, 0},
{"AUTRICHE", "AU", 0, 0, 0, 0},
{"FRANCE", "FR", 0, 0, 0, 0},
{"ITALIE", "IT", 0, 0, 0, 0},
{"LUXEMBOURG", "LU", 0, 0, 0, 0},
{"POLOGNE", "PL", 0, 0, 0, 0},
{"SUISSE", "CH", 0, 0, 0, 0}};
CH20 nom;
int NbMax = 0;
int i;
CH2 codeN;

printf("Entrez le nom d'un skieur : ");
gets(nom);
do
{
//On compare le nom avec ceux du tableau; on regarde s'il existe déjà !
for(i=0; i<NbMax; i++)
{
if(strcmp(nom, TabP[i].Nom)==0)
{
printf("ERREUR : Nom d%cja %cxistant.", 130, 130); //S'il existe, on le refuse et on lit un autre nom !
break;
}

}
//S'il n'existe pas, on demande son code nationalité !
if (i=NbMax+1) //On demande le code nationalité si on a parcouru tout le tableau.
{
printf("\nEntrez un code nationalit%c : ", 130);
gets(codeN);

for(i=0; i<6; i++) //On compare le code avec ceux du tableau; on regarde s'il existe !
{ //Si le code nationalité est bon, il est inscrit !
if(strcmp(codeN, TabN[i].Code) == 0)
{
strcpy (TabP[NbMax].Nom,nom);
TabP[NbMax].iCode = i;
NbMax++;
break;
}

}
if(i=6) //Si le code nationalité n'existe pas, on le refuse et on lit un autre nom !
{
printf("ERREUR : code nationalit%c inconnu !", 130);
}
}

printf("%s, %s,%d", TabP[NbMax].Nom, TabN[TabP[NbMax].iCode].Code, NbMax);



gets(nom);
}
while (nom[0] != '*');



}


A voir également:

2 réponses

armasousou Messages postés 1267 Date d'inscription dimanche 16 août 2009 Statut Membre Dernière intervention 30 décembre 2016 83
2 nov. 2012 à 11:00
Bah déja #include "stdio.h"
#include "stdlib.h"
#include "string.h"


Les biblio standards sont entre <> :D
Compile avec gcc et donne la liste des erreures pour le reste
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
2 nov. 2012 à 18:42
Il y a plein d'erreur dans ton code.

Tout d'abord les en-têtes standards, c'est vivement conseillé de les mettre entre <> même si non obligatoire.

PERS TabP[20];
NAT TabN[7]

Tes structures n'ont pas été déclarées avec typedef.
Donc tu dois mettre : struct PERS TabP[20];
struct NAT TabN[7]...
Ou sinon, il faut utiliser typedef.

gets(nom);
gets() est obsolète. Il faut utiliser fgets() à la place.
De plus, attention, fgets () (et même gets()) vont stocker '\n' dans la variable. Donc, toutes tes comparaisons vont foirer. Il faut enlever '\n' en le remplaçant par un '\0'.

if (i=NbMax+1)
Pour comparer, c'est == et non un simple =. A corriger aux autres endroits.

Et enfin, tu as oublié le return 0; final.
0