Déclaration en C : problème
Résolu/Fermé
A voir également:
- Déclaration en C : problème
- Déclaration de revenus - Guide
- Bug declaration impots 2023 - Guide
- Declaration impot 2024 - Accueil - Applications & Logiciels
- Déclaration d'impôt 2024 - Guide
- Skrill declaration impot - Forum Vos droits sur internet
10 réponses
schmitou
Messages postés
146
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
5 mai 2010
34
4 juil. 2008 à 13:31
4 juil. 2008 à 13:31
c'est quoi l'erreur qui t'est signaler?
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
4 juil. 2008 à 13:35
4 juil. 2008 à 13:35
char* status[6]={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
moi je mettrai des guillemets :
char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS,Retraités","Douze_mois_sans_incident_paiement"};
moi je mettrai des guillemets :
char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS,Retraités","Douze_mois_sans_incident_paiement"};
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
4 juil. 2008 à 13:43
4 juil. 2008 à 13:43
t as pas l impression de dupliquer tes posts ?
http://www.commentcamarche.net/forum/affich 7226728 urgent programme en c
http://www.commentcamarche.net/forum/affich 7226728 urgent programme en c
schmitou
Messages postés
146
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
5 mai 2010
34
4 juil. 2008 à 13:43
4 juil. 2008 à 13:43
essai ca:
char status[]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","Douze_mois_sans_incident_paiement"};
char status[]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","Douze_mois_sans_incident_paiement"};
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
4 juil. 2008 à 14:47
4 juil. 2008 à 14:47
scanf("%s",&(*statut1));
->scanf("%s",&(*statut[1]));
il faut mettre les crochets pour acceder a un tableau
int (R[1]),int (R[2]) //tu defini 2 fois le tableau R!
->int r[3] //entre les crochets, tu met la taille du tableau. tu ne declare pas cellule par cellule
j ai mis 3 pke tu utilises r[2].
no oublies pas qu un tableau de taille n commence a 0 et fini a n-1
->scanf("%s",&(*statut[1]));
il faut mettre les crochets pour acceder a un tableau
int (R[1]),int (R[2]) //tu defini 2 fois le tableau R!
->int r[3] //entre les crochets, tu met la taille du tableau. tu ne declare pas cellule par cellule
j ai mis 3 pke tu utilises r[2].
no oublies pas qu un tableau de taille n commence a 0 et fini a n-1
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
4 juil. 2008 à 15:46
4 juil. 2008 à 15:46
et ben au lieu de me chamber et de me dire que je n ai pas bon, donnes nous les correction que tu as apporté, ca servira peute tre a quelqun
j ai apporté des corrections rapides, mais quand on voit certains trucs que tu ecris:
l adresse du contenu d un pointeur.. c est a dire un pointeur. ca c est dans ta fonction ici:scanf("%s",&(*statut[1]));
c est vrai qu il aurai mieu valu faire scanf("%s",statut[1]); //avec statut etant un tableau de poointeurs, car tu met des chaines dedan.
en plus dans ton code, il y a du statut et du status
ensuite, je ne suis pas sur que tu puisse ecrire dans statut, vu que tu l a alloué en"brut" dans ton code.
tu veux que je regqrde encore plus pour te montrer a quel point ton programme est moche ?
j ai apporté des corrections rapides, mais quand on voit certains trucs que tu ecris:
l adresse du contenu d un pointeur.. c est a dire un pointeur. ca c est dans ta fonction ici:scanf("%s",&(*statut[1]));
c est vrai qu il aurai mieu valu faire scanf("%s",statut[1]); //avec statut etant un tableau de poointeurs, car tu met des chaines dedan.
en plus dans ton code, il y a du statut et du status
ensuite, je ne suis pas sur que tu puisse ecrire dans statut, vu que tu l a alloué en"brut" dans ton code.
tu veux que je regqrde encore plus pour te montrer a quel point ton programme est moche ?
Excuse-moi, mais c'est si vivifiant de pouvoir réussir soi-même; tes derniers commentaires m'ont permis de résoudre le problème de segmentation. en effet, j'avais mis scanf("%s,&(statut1));
Alors qu'en fait, il fallait faire scanf("%s",statut1);
Pour le problème du revenu, j'ai juste déclaré ceci : int *R;
Reste qu'avec ces seuls changements, l'erreur de segmentation reste. C'est sans doute un problème d'allocation dynamique : j'ai introduis ces 2 lignes supplémentaires :
statut1=(char*)malloc(6*(sizeof(char)));
statut2=(char*)malloc(6*(sizeof(char)));
Et le tour est joué!!!
Alors qu'en fait, il fallait faire scanf("%s",statut1);
Pour le problème du revenu, j'ai juste déclaré ceci : int *R;
Reste qu'avec ces seuls changements, l'erreur de segmentation reste. C'est sans doute un problème d'allocation dynamique : j'ai introduis ces 2 lignes supplémentaires :
statut1=(char*)malloc(6*(sizeof(char)));
statut2=(char*)malloc(6*(sizeof(char)));
Et le tour est joué!!!
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
4 juil. 2008 à 16:07
4 juil. 2008 à 16:07
attention ! il faut faire une allocation memoire pour le R. Scanf ne la fera pas a ta place , il lui faut un buffer.
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
4 juil. 2008 à 16:15
4 juil. 2008 à 16:15
un buffer est une zone memoire pour le transit des donnés.... ou elles sont stockées de manière temporaire avant traitement.
de manière plus concrète, c est un enorme tableau. sa taille depend de ce que tu traite.. si c est pour des entrés clavier, je met char buffer[80]; si c est pour des donnés reseau, je passe facilement a 1024...
de manière plus concrète, c est un enorme tableau. sa taille depend de ce que tu traite.. si c est pour des entrés clavier, je met char buffer[80]; si c est pour des donnés reseau, je passe facilement a 1024...
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
4 juil. 2008 à 16:21
4 juil. 2008 à 16:21
colles moi ton code actuel, je te soupsonne d afficher un pointer ... et non ce qu il pointe
voilà mon code :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Solvabilite_acquise 1
#define Demande_de_Caution_Solidaire 2
#define Impossible 3
char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","En place depuis plus de Douze_mois_sans_incident_paiement"};
//donne des valeurs allant de 0 à 5 aux différents status scanf("%s",&status[0]);scanf("%s",&status[1]);scanf("%s",&status[2]);scanf("%s",&status[3]);scanf("%s",&status[4]);scanf("%s",&status[5]);scanf("%s",&statut1);scanf("%s",&statut2);
colocation(int R[],int L,char *statut1,char *statut2)
{ int i,h,k;
/* Cas 2 En place */
if(strcmp(statut1,statut2) && strcmp(statut2,status[5]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
/* Cas 1 En place avec n'importe qui */
else if((strcmp(statut1,status[5]) && !strcmp(statut2,status[5])) ||(strcmp(statut2,status[5]) && !strcmp(statut1,status[5])))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
while((k=*status[0]) || (k=*status[3]) || (k=*status[4]))
/* Cas 2 C.D.I(k=0), 2 T.N.S(k=3), 2 Retraités(k=4) */
{ if(strcmp(statut1,statut2) && strcmp(statut2,status[k]))
{ if(R[0]>3*L || R[1]>3*L)
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
else
{ if(R[0]<2*L && R[1]<2*L)
printf("Impossibilité de soumettre votre dossier\n");
else { if((R[0]<2*L && R[1]>=2*L && R[1]<3*L) || (R[1]<2*L && R[0]>=2*L && R[0]<3*L))
printf("Demande de caution solidaire\n");
}
}
}
/* Cas 1 C.D.I(k=0), 1 T.N.S(k=3), 1 Retraité(k=4) avec n'importe qui */
else if((strcmp(statut1,status[k]) && !strcmp(statut2,status[k]) && statut2!=status[1] && statut2!=status[5]) || (strcmp(statut2,status[k]) && !strcmp(statut1,status[k])) && statut1!=status[1] && statut1!=status[5])
{
while( (R[0]<2*L && R[1]<=3*L)||(R[0]<2*L && R[1]<=3*L) )
{ (k=0)? 3 : 2;
(k=3)? 3 : 2;
(k=4)? 3 : 2;
}
while( (R[0]>3*L && (R[1]<=3*L || R[1]>=2*L || R[1]<2*L))||(R[1]>3*L && (R[0]<=3*L || R[0]>=2*L || R[0]<2*L)) )
{ (k=0)? 1 : 2;
(k=3)? 1 : 2;
(k=4)? 1 : 2;
}
}
}
/* Cas 2 Etudiants*/
if(strcmp(statut1,statut2) && strcmp(statut2,status[2]))
printf("Demande de caution solidaire\n");
/*Etudiant avec quelqu'un ayant un autre statut*/
else if((strcmp(statut1,status[2]) && !strcmp(statut2,status[2]) && statut2!=status[1] && statut2!=status[5]) ||((strcmp(statut2,status[2]) && !strcmp(statut1,status[2]) && statut1!=status[1] && statut1!=status[5])))
{ (R[1]>3*L || R[0]>3*L)? 1 : 2 || 3;
(R[1]<2*L || R[0]<2*L)? 3 : exit(1);
if((strcmp(statut1,status[2]) && strcmp(statut2,status[1])) || (strcmp(statut2,status[2]) && strcmp(statut1,status[1])))
(R[1]>2*L || R[0]>2*L)? 2 : 3;
}
/* Cas 2 C.D.D */
if(strcmp(statut1,statut2) && (statut2,status[1]))
{ if(R[0]<2*L && R[1]<2*L)
printf("Impossibilité de soumettre votre dossier\n");
else
{ if((R[0]<2*L && R[1]>2*L) || (R[1]<2*L && R[0]>2*L))
printf("Demande de caution solidaire\n");
}
}
/* Cas 1 C.D.D avec n'importe qui sauf En place : cas de soumission*/
else if((strcmp(statut1,status[1]) && !strcmp(statut2,status[1]) && statut2!=status[5]) || (strcmp(statut2,status[1]) && !strcmp(statut1,status[1]) && statut1!=status[5]))
{ (R[1]<2*L || R[0]<2*L)? 3 : exit(2);
while((R[0]<2*L || R[0]>=2*L || R[0]>3*L) && R[1]<3*L)
{ printf("Demande de caution solidaire\n");
}
if(strcmp(statut1,status[1]) && strcmp(statut2,status[2]))
{ while((R[0]<2*L && R[1]>=2*L))
{ printf("Impossibilité de soumettre votre dossier\n");
}
while(R[0]>=2*L || R[1]>=2*L)
printf("Demande de caution solidaire\n");
}
}
}
main()
{ int i;int L; int *R;
char *status[6];char *statut1;char *statut2;
statut1=(char*)malloc(6*(sizeof(char)));
statut2=(char*)malloc(6*(sizeof(char)));
printf("Indiquer la situation du premier colocataire : %s\n",statut1);
scanf("%s",statut1);
printf("Indiquer la situation du deuxième colocataire : %s\n",statut2);
scanf("%s",statut2);
printf("Indiquer le loyer du foyer : %d\n",L);
scanf("%d",&L);
printf("Indiquer le revenu du colocataire1 : %d\n",R[0]);
scanf("%d",&R[0]);
printf("Indiquer le revenu du colocataire2 : %d\n",R[1]);
scanf("%d",&R[1]);
colocation(R,L,statut1,statut2);
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Solvabilite_acquise 1
#define Demande_de_Caution_Solidaire 2
#define Impossible 3
char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","En place depuis plus de Douze_mois_sans_incident_paiement"};
//donne des valeurs allant de 0 à 5 aux différents status scanf("%s",&status[0]);scanf("%s",&status[1]);scanf("%s",&status[2]);scanf("%s",&status[3]);scanf("%s",&status[4]);scanf("%s",&status[5]);scanf("%s",&statut1);scanf("%s",&statut2);
colocation(int R[],int L,char *statut1,char *statut2)
{ int i,h,k;
/* Cas 2 En place */
if(strcmp(statut1,statut2) && strcmp(statut2,status[5]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
/* Cas 1 En place avec n'importe qui */
else if((strcmp(statut1,status[5]) && !strcmp(statut2,status[5])) ||(strcmp(statut2,status[5]) && !strcmp(statut1,status[5])))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
while((k=*status[0]) || (k=*status[3]) || (k=*status[4]))
/* Cas 2 C.D.I(k=0), 2 T.N.S(k=3), 2 Retraités(k=4) */
{ if(strcmp(statut1,statut2) && strcmp(statut2,status[k]))
{ if(R[0]>3*L || R[1]>3*L)
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
else
{ if(R[0]<2*L && R[1]<2*L)
printf("Impossibilité de soumettre votre dossier\n");
else { if((R[0]<2*L && R[1]>=2*L && R[1]<3*L) || (R[1]<2*L && R[0]>=2*L && R[0]<3*L))
printf("Demande de caution solidaire\n");
}
}
}
/* Cas 1 C.D.I(k=0), 1 T.N.S(k=3), 1 Retraité(k=4) avec n'importe qui */
else if((strcmp(statut1,status[k]) && !strcmp(statut2,status[k]) && statut2!=status[1] && statut2!=status[5]) || (strcmp(statut2,status[k]) && !strcmp(statut1,status[k])) && statut1!=status[1] && statut1!=status[5])
{
while( (R[0]<2*L && R[1]<=3*L)||(R[0]<2*L && R[1]<=3*L) )
{ (k=0)? 3 : 2;
(k=3)? 3 : 2;
(k=4)? 3 : 2;
}
while( (R[0]>3*L && (R[1]<=3*L || R[1]>=2*L || R[1]<2*L))||(R[1]>3*L && (R[0]<=3*L || R[0]>=2*L || R[0]<2*L)) )
{ (k=0)? 1 : 2;
(k=3)? 1 : 2;
(k=4)? 1 : 2;
}
}
}
/* Cas 2 Etudiants*/
if(strcmp(statut1,statut2) && strcmp(statut2,status[2]))
printf("Demande de caution solidaire\n");
/*Etudiant avec quelqu'un ayant un autre statut*/
else if((strcmp(statut1,status[2]) && !strcmp(statut2,status[2]) && statut2!=status[1] && statut2!=status[5]) ||((strcmp(statut2,status[2]) && !strcmp(statut1,status[2]) && statut1!=status[1] && statut1!=status[5])))
{ (R[1]>3*L || R[0]>3*L)? 1 : 2 || 3;
(R[1]<2*L || R[0]<2*L)? 3 : exit(1);
if((strcmp(statut1,status[2]) && strcmp(statut2,status[1])) || (strcmp(statut2,status[2]) && strcmp(statut1,status[1])))
(R[1]>2*L || R[0]>2*L)? 2 : 3;
}
/* Cas 2 C.D.D */
if(strcmp(statut1,statut2) && (statut2,status[1]))
{ if(R[0]<2*L && R[1]<2*L)
printf("Impossibilité de soumettre votre dossier\n");
else
{ if((R[0]<2*L && R[1]>2*L) || (R[1]<2*L && R[0]>2*L))
printf("Demande de caution solidaire\n");
}
}
/* Cas 1 C.D.D avec n'importe qui sauf En place : cas de soumission*/
else if((strcmp(statut1,status[1]) && !strcmp(statut2,status[1]) && statut2!=status[5]) || (strcmp(statut2,status[1]) && !strcmp(statut1,status[1]) && statut1!=status[5]))
{ (R[1]<2*L || R[0]<2*L)? 3 : exit(2);
while((R[0]<2*L || R[0]>=2*L || R[0]>3*L) && R[1]<3*L)
{ printf("Demande de caution solidaire\n");
}
if(strcmp(statut1,status[1]) && strcmp(statut2,status[2]))
{ while((R[0]<2*L && R[1]>=2*L))
{ printf("Impossibilité de soumettre votre dossier\n");
}
while(R[0]>=2*L || R[1]>=2*L)
printf("Demande de caution solidaire\n");
}
}
}
main()
{ int i;int L; int *R;
char *status[6];char *statut1;char *statut2;
statut1=(char*)malloc(6*(sizeof(char)));
statut2=(char*)malloc(6*(sizeof(char)));
printf("Indiquer la situation du premier colocataire : %s\n",statut1);
scanf("%s",statut1);
printf("Indiquer la situation du deuxième colocataire : %s\n",statut2);
scanf("%s",statut2);
printf("Indiquer le loyer du foyer : %d\n",L);
scanf("%d",&L);
printf("Indiquer le revenu du colocataire1 : %d\n",R[0]);
scanf("%d",&R[0]);
printf("Indiquer le revenu du colocataire2 : %d\n",R[1]);
scanf("%d",&R[1]);
colocation(R,L,statut1,statut2);
}
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
4 juil. 2008 à 16:36
4 juil. 2008 à 16:36
bon, j ai pas le temps de regarder tout ca pour l isntant, tu a l air d etre debutant, il y a beaucoup a verifier.
je remarque des incoherences:
char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","En place depuis plus de Douze_mois_sans_incident_paiement"};
//donne des valeurs allant de 0 à 5 aux différents status
scanf("%s",&status[0]);
scanf("%s",&status[1]);
scanf("%s",&status[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s",&status[5]);
scanf("%s",&statut1);
scanf("%s",&statut2);
tu commence par declarer ton tableau de chaines, status, et a la ligne d apres tu ecrase les valeurs que tu viens de mettre dedan. ce n est pas logique. c est l un ou c est lautre.
ensuite, scanf("%s",&statut2); je ne vois pas la declaration, peut etre n ai je pas assez cherché
(k=3)? 3 : 2; // j ai croisé une fois cette ecriture. Je ne pense pas que tu ai le niveau pour te permetre d ecrire comme ca.... c est un if / else, c est ca ? alors ecris le completement
precise moi le nom et l endroit de ta valeur qui merde... essaye de mettre une * devant la variable... je ne te garanti rienm je dis ca sans avoir localisé ou Ct dans le code
je remarque des incoherences:
char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","En place depuis plus de Douze_mois_sans_incident_paiement"};
//donne des valeurs allant de 0 à 5 aux différents status
scanf("%s",&status[0]);
scanf("%s",&status[1]);
scanf("%s",&status[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s",&status[5]);
scanf("%s",&statut1);
scanf("%s",&statut2);
tu commence par declarer ton tableau de chaines, status, et a la ligne d apres tu ecrase les valeurs que tu viens de mettre dedan. ce n est pas logique. c est l un ou c est lautre.
ensuite, scanf("%s",&statut2); je ne vois pas la declaration, peut etre n ai je pas assez cherché
(k=3)? 3 : 2; // j ai croisé une fois cette ecriture. Je ne pense pas que tu ai le niveau pour te permetre d ecrire comme ca.... c est un if / else, c est ca ? alors ecris le completement
precise moi le nom et l endroit de ta valeur qui merde... essaye de mettre une * devant la variable... je ne te garanti rienm je dis ca sans avoir localisé ou Ct dans le code
les scanf sont inclus dans le commentaire, donc le souci n'est pas là!
scanf("%s",&status[0]);
scanf("%s",&status[1]);
scanf("%s",&status[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s",&status[5]);
scanf("%s",&statut1);
scanf("%s",&statut2);
la condition(k=3)? me permet de résumer la situation pour 3 statuts particuliers : cdi, tns, retraité.
Je fais comment alors?
scanf("%s",&status[0]);
scanf("%s",&status[1]);
scanf("%s",&status[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s",&status[5]);
scanf("%s",&statut1);
scanf("%s",&statut2);
la condition(k=3)? me permet de résumer la situation pour 3 statuts particuliers : cdi, tns, retraité.
Je fais comment alors?
4 juil. 2008 à 14:43
expected identifier or ‘(’ before ‘int’
error: ‘statut1’ undeclared (first use in this function)
error: (Each undeclared identifier is reported only once
error: for each function it appears in.)
error: ‘R’ undeclared (first use in this function)