Erreur de Segmentation C

Fermé
REto_9470 Messages postés 1 Date d'inscription dimanche 21 février 2021 Statut Membre Dernière intervention 21 février 2021 - Modifié le 21 févr. 2021 à 14:07
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 21 févr. 2021 à 23:33
Bonjour !

Je dois effectuer un programme pour la gestion d'une banque pour un TP et malheureusement j'ai un problème de segmentation...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LETTRES 20
#define MAX_SOLDE 999999999
#define MAX_NBR_CLIENT 30

struct client{

char nom[MAX_LETTRES];
char prenom[MAX_LETTRES];
char solde[MAX_SOLDE];
};

struct client T[MAX_NBR_CLIENT];

int ajoutclient(){

int i;

for(i=0 ; i<MAX_NBR_CLIENT; i++){

printf("Nom du client :\n");
scanf("%s",T[i].nom);
fflush(stdin);

printf("Prénom du client :\n");
scanf("%s",T[i].prenom);
fflush(stdin);

printf("Solde du client :\n");
scanf("%s",T[i].solde);
fflush(stdin);
}
}

int modif_client(){ //Fonction permettant l'ajout d'un client

int i;
char nom[MAX_LETTRES];
char prenom[MAX_LETTRES];

printf("Entrez le Nom du client que vous voulez modifier\n");
scanf("%s",nom);

for(i=0 ; i<MAX_NBR_CLIENT; i++){

if (nom == T[i].nom || prenom == T[i].prenom){

printf("Nom :\n");
scanf("%s",T[i].nom);
fflush(stdin);

printf("Prénom :\n");
scanf("%s",T[i].prenom);
fflush(stdin);

printf("Solde :\n");
scanf("%s",T[i].solde);
fflush(stdin);

}
}
}

int recherche_affiche_client(){ //Fonction permettant la recherche c'un client et l'affichage de ses informations

int i;
char nom[MAX_LETTRES];
char prenom[MAX_LETTRES];

printf("Veuillez saisir le nom du client recherché\n");
scanf("%s\n",nom);

for(i=0 ; i<MAX_NBR_CLIENT; i++){

int test=strcmp(T[i].nom , nom);

if (test == 0){

printf("Espace client de %s\n", nom);
printf("------------------------------------------------------------------\n");
printf("Nom : %s\n", T[i].nom);
printf("Prénom : %s\n", T[i].prenom);
printf("Solde actuelle : %p\n", T[i].solde);
}
}
}

int suprclient(){ //Fonction permettant de la supression d'un client

int i;
char nom[MAX_LETTRES];
char prenom[MAX_LETTRES];

printf("Veuillez saisir le nom du client à suprimer :\n");
scanf("%s",T[i].nom);

for(i=0 ; i<MAX_NBR_CLIENT ; i++){

if(nom == T[i].nom){

strcpy(T[i].nom , T[i+1].nom);
strcpy(T[i].prenom , T[i+1].prenom);
strcpy(T[i].solde , T[i+1].solde);

}
}

for(i=0 ; i<MAX_NBR_CLIENT ; i++){

printf("\n");

printf("Nom du client : %s\n",T[i].nom);
printf("Prénom du client :%s\n",T[i].prenom);
printf("%s\n",T[i].solde);
}
}

int main(void){

int choix;
//system("color 4E");

// Menu du programme facilitant le choix de l'utilisateur sur les différentes actions

do{

printf("\n ------------------------------MENU------------------------------");
printf("\n 1/ Ajouter un nouveau client");
printf("\n 2/ Modifier l'espace d'un client");
printf("\n 3/ Rechercher et afficher le compte d'un client");
// printf("\n 4/ Virement d'un client vers un autre client");
printf("\n 5/ Suppression d'un compte client");
printf("\n 6/ Quitter-----------------------");

printf("\n");

printf("Veuillez rentrer le numéro correspondant à votre choix :\n");
scanf("%d\n",&choix);

switch (choix) { // Vérification du choix de l'utilisateur

case 1 : system("cls"); printf("\n Ajouter un nouveau client");
ajoutclient();
break;

case 2 : system("cls"); printf("\n Modifier l'espace d'un client");
modif_client();
break;

case 3 : system("cls"); printf("\n Rechercher et afficher le compte d'un client");
recherche_affiche_client();
break;

case 4 : system("cls"); printf("\n Suppression d'un comte client");
suprclient();
break;

case 5 : system("cls"); printf("\n Quitter-----------------------");

break;

default : system("cls"); printf("\n **ERROR** Veuillez taper un des chiffres correspondant :");

break;
}
} while (choix !=5);

}

--------------------------------------------------------------------------------------------------------------------------------------------------------------

Je ne vois pas du tout mon erreur, appart peut être un dépassement de la taille du tableau mais je ne sais pas comment le résoudre...

j'espère que vous m'aideriez pour mon problème, merci d'avance !!!

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
21 févr. 2021 à 23:33
Bonjour,

Pour poster du code, il faut utiliser les balises (le bouton [<>]), édite ton post.

En tout cas, tu dois avoir un méga PC, tu alloues pour tes 30 clients un tableau
T
de plus 30 giga-octets! Chaque champ
solde
fait 1 milliard de caractères!
0