Déclaration en C : problème

Résolu/Fermé
firk - 4 juil. 2008 à 13:28
 firk - 4 juil. 2008 à 16:55
Bonjour,

Je ne vois pas les problèmes de déclaration que m'indique la console. Pouvez-vous m'éclairer, svp?
Je serai là d'ici une heure et demie(pause déj...)

char* status[6]={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
//donne des valeurs allant de 0 à 5 aux différents status

colocation(int R[],int L,char *statut1,char *statut2) // je passe outre la fonction
{
}

main()
{ int i;int L, int (R[1]),int (R[2]);
char*status[6];

scanf("%s",&(*statut1));
printf("Indiquer la situation du premier colocataire : %s\n",*statut1);
scanf("%s",&(*statut2));
printf("Indiquer la situation du deuxième colocataire : %s\n",*statut2);

scanf("%d",&L);
printf("Indiquer le loyer du foyer : %d\n",L);
scanf("%d",&R[1]);
printf("Indiquer le revenu du colocataire1 : %d\n",R[1]);
scanf("%d",&R[2]);
printf("Indiquer le revenu du colocataire2 : %d\n",R[2]);

colocation(R,L,*statut1,*statut2);
}
A voir également:

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
c'est quoi l'erreur qui t'est signaler?
0
c'est dans la main() :


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)
0
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
char* status[6]={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,D­ouze_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","D­ouze_mois_sans_incident_paiement"};
0
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
t as pas l impression de dupliquer tes posts ?
http://www.commentcamarche.net/forum/affich 7226728 urgent programme en c
0
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
essai ca:

char status[]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","­Etudiant","TNS","Retraités","D­ouze_mois_sans_incident_paiement"};
0

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
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
0
Merci pour ta contribution, mais tu n'as pas bon.
J'ai résolu moi-même le problème.

A +.
.
0
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
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 ?
0
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é!!!
0
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
attention ! il faut faire une allocation memoire pour le R. Scanf ne la fera pas a ta place , il lui faut un buffer.
0
C'est ce que je viens de remarquer en testant le programme.
Il faut en effet que je fasse l'allocation pour les revenus, ainsi que pour le loyer.

Qu'est-ce qu'un buffer au fait?
0
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
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...
0
Comment tu crées un buffer pour les revenus, et pour le loyer?
Le réglage de l'allocation mémoire semble ne pas suffire, puisque pour le loyer, avant que je rentre ma valeur, la valeur
-1209769355.
Idem pour le revenu 1 : -1076081768
Idem pour le revenu 2 : -1209856628.

Qu'est-ce que tu proposes?
0
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
colles moi ton code actuel, je te soupsonne d afficher un pointer ... et non ce qu il pointe
0
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);
}
0
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
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",&st­atus[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s&­quot;,&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
0
les scanf sont inclus dans le commentaire, donc le souci n'est pas là!


scanf("%s",&status[0]);
scanf("%s",&status[1]);
scanf("%s",&st­atus[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s&­quot;,&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?
0