Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/04/2008, à 16:42

WARDI

[Résolu] - code erreur 139 (programation C )

Bonjour,

j ' ai fait une fonction qui controle la saisie d'une chaine de caractaire, le compilateur n'a afficher aucun erreur , mais dans l'execution, au niveau de l'appelle de la fn controle_saisie, justement apres la saisie de la chaine, il m'affiche

Segmentation fault (core dumped) 
program exited with code: 139

voici un quote de mon programe(test)

int controle_saisie(char S[]) {
	
	char Tchar[60];="AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn";
	int j;
	int i=0;
	int test=0;
	
	while((test==0)||(S[i]!='\0')) {
		test=1;
		j=0;
		while((test==1)||(Tchar[j]!='\0')) {
			if(S[i]==Tchar[j]) {
				test=0;
			}
			j++;
		}
		i++;
	}
	return test;
}

int main(void) {

char nom[50];
in test;
 puts("\n\nDonner le nom d'employe");
     do {
     	scanf("%s",nom);
     	test=controle_saisie(nom);
     	if(test==1) {
     		printf("Erreur,Le nom contient des caractaire spetiaux!!");
		}
	}while(test==1);
     return 0;
}

pouvez vous me donner une explication s'il vous plaie

merci....

Hors ligne

#2 Le 22/04/2008, à 16:59

Ultandir

Re : [Résolu] - code erreur 139 (programation C )

Bonjour,

J'ai une petite idée mais peut tu poster la liste entière des erreurs??


Fedora Cambridge i386
Zenwalk 5.2
-------------
Il y a 10 types de personnes : celles qui connaissent le binaire, et celles qui ne le connaissent pas.

Hors ligne

#3 Le 22/04/2008, à 17:14

WARDI

Re : [Résolu] - code erreur 139 (programation C )

Ultandir a écrit :

Bonjour,

J'ai une petite idée mais peut tu poster la liste entière des erreurs??

je compile avec Geany sous ubuntu 7.10,
le program s'execute normalement, apres la saisie du nom le programme m'affiche l'erreur

Segmentation fault (core dumped)

------------------------
(program exited with code: 139)

Hors ligne

#4 Le 22/04/2008, à 17:23

Ultandir

Re : [Résolu] - code erreur 139 (programation C )

Comme le C est tr permissif, il y a beaucoup de choses qui semblent du pinaillement mais qui peuvent être importantes :

Ta variable "test", peut un etre boolean non? ( D'ailleur, ne serait-ce pas une erreur le

in test;

?? a la troisième ligne de ton main?

Au lieu de déclarer "test" 2 fois, déclare le en variable tout en haut de ton source, juste après tes includes.

Evite les tests comme

Tchar[j]!='\0'

Pour des tests de ce genre, soit utilise

strcmp( [i]chaine1, chaine2[/i] );

Ou joue plutot sur la taille du tableau

sizeof(Tchar);

( a vérifier dans le man pour utilisation bien spécifique pour toi )

Sinon j'ai un petit doute :

scanf("%s",nom);

Le scanf ne prend il pas un pointeur?.?.? ==> a vérifier


Fedora Cambridge i386
Zenwalk 5.2
-------------
Il y a 10 types de personnes : celles qui connaissent le binaire, et celles qui ne le connaissent pas.

Hors ligne

#5 Le 22/04/2008, à 17:36

WARDI

Re : [Résolu] - code erreur 139 (programation C )

Ok,
d'abord in test etais une erreur de frappe que g cooriger dans mon programme qui comporte plus de 450 ligne et des disaines de test, ensuite , on pointe j'amai sur les chaine de caractaire dans scanf,
bon, une autre chose, mon but n'est pas de comparer 2 chaine, mais c de parcourir les deux chaine par caractaire est comparer les caractaire, donc j'utilise pas strcmp...
le caractaire '/0' ne pe pas etre le probleme aussi, j'ai deja essayer d'autre chose(comme j<strlen(Tchar)  )
y a t'il d'autre proposition svp? je suis bloque!!!
merci....

Hors ligne

#6 Le 22/04/2008, à 17:55

Seren

Re : [Résolu] - code erreur 139 (programation C )

char Tchar[60];="AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn";

Il y a un point virgule en trop après ton crochet mais c'est certainement pas ton problème.

En regardant rapidement, je vois pas ton problème, mais le segmentation fault c'est que ta condition d'arrêt ne marche pas pour une raison ou une autre, donc en gros tu incrémentes i++ et j++ éternellement, jusqu'à ce que ton système voit que t'essayes d'accéder à une zone mémoire interdite, et donc ferme ton programme pour éviter de crasher tout le système.

Par contre, pour trouver ton problème tu peux mettre des printf dans les boucles while de ta fonction de test.

Par exemple printf(" i=%d j=%d T[j]= %c \n", i, j, T[j]);

ça te permettra de voir ce qui se passe, et où ça s'affole. Ensuite en fonction tu peux mettre plus ou moins d'infos dans ton printf.

Dernière modification par Seren (Le 22/04/2008, à 18:03)


"I am not young enough to know everything". Oscar Wilde

Hors ligne

#7 Le 22/04/2008, à 18:07

WARDI

Re : [Résolu] - code erreur 139 (programation C )

Merci bien Seren:):)
voici exactement le problem --> " || " =>je l'ai remplacer par un " && ",
bon c'etais une faute grave, que j'ai pas remarque,
Merci a tou;


PROBLEME RESOLUT lol

Hors ligne

#8 Le 22/04/2008, à 21:11

Seren

Re : [Résolu] - code erreur 139 (programation C )

Bon maintenant que t'as t'as trouvé je peux te dire que y a un moyen plus simple qui inclus pas d'utiliser deux boucles.

Et à mon avis c'est le but de ton exo. En gros, si tu regardes une table ascii, tu peux voir que de 'A' à 'Z' et de 'a' à 'z' les caractères se suivent, donc plutôt que de faire deux boucles imbriquées, ce qui est assez complexe tu peux simplement tester.

Pour tout i
if( ((nom[i] >= 'A') &&  (nom[i] <= 'Z')) || ((nom[i] >= 'a') &&  (nom[i] <= 'z')) )
       return OK;
else
       return ERROR;


"I am not young enough to know everything". Oscar Wilde

Hors ligne

#9 Le 22/04/2008, à 21:35

nicolas.sitbon

Re : [Résolu] - code erreur 139 (programation C )

Seren a écrit :

Bon maintenant que t'as t'as trouvé je peux te dire que y a un moyen plus simple qui inclus pas d'utiliser deux boucles.

Et à mon avis c'est le but de ton exo. En gros, si tu regardes une table ascii, tu peux voir que de 'A' à 'Z' et de 'a' à 'z' les caractères se suivent, donc plutôt que de faire deux boucles imbriquées, ce qui est assez complexe tu peux simplement tester.

Pour tout i
if( ((nom >= 'A') &&  (nom[i] <= 'Z')) || ((nom[i] >= 'a') &&  (nom[i] <= 'z')) )
       return OK;
else
       return ERROR;

Pourquoi réinventer la roue?
Personne ne connait [i]isalpha()
(ctype.h) ?

Hors ligne