[encore une question de debutant sur les tableau et structure]
38 réponses
babar
Malgres la bonne dizaine de message qui traite le sujet ici, j'ose quand
meme demander un peu d aide parce que je ne comprend pas pourquoi mon
code ne marche pas.
merci de bien vouloir regarder ce code et me signaler ce qui vous semble
incorrect.
#include <stdio.h>
#include <string.h>
typedef struct Matrice{
char valeur[50][25];
int effectif;
int teffectif[50];
}mat;
int ch_id(mat matrice,char id[10]); // permet de donné la ligne de
chaque element du tableau ( ref par id de 9 caractere)
char mget(mat matrice,char id[10],int pos);// permet de recup 1 caractere
void mput(mat *matrice,char id[10],int pos,char chput);// permet de
mettre 1 caractere
void mmget(mat matrice,char id[10],int pos1, int pos2, char
resultat[pos2-pos1]);//permet de recup une chaine de caractere
void mmput(mat *matrice,char id[10],int pos1,int pos2,char
chput[pos2-pos1]);//permet de mettre une chaine de caractere
void mnewline(mat *matrice, char id[10]);//permet de construire une ligne
void mdelline(mat *matrice, char id[10]);//permet de detruire une ligne
void mprintline(mat matrice, char id[10]);//permet d affiché une ligne
void mid(char id[10]);//permet d entrée une id
int main()
{
int i,choix,pos1,pos2;
char id[10],temp[10];
mat test;
test.effectif=0;
for (i=0;i<=50;i++)test.teffectif[i]=0;
printf(" Bienvenue dans le programme d\' edition de tableau\n Menu
: \n \n");
printf(" 1. Lire une ligne\n");
printf(" 2. Cree une ligne\n 3. Lire un element d une ligne \n 4.
Lire une chaine d une ligne\n");
printf(" 5. Ecrire un caractere dans une ligne a une position
precise\n");
printf(" 6. Ecrire une chaine de caractere ds une ligne a une
position precise \n");
printf(" 7. Effacer une ligne\n 8. Quitter\n");
choix=0;
while (choix!=8){
printf("Votre choix :");
scanf("%d",&choix);
switch (choix){
case 1 :
printf("Lire une ligne.\n");
mid(id);
mprintline(test,id);
break;
case 2 :
printf("Creer une ligne.\n");
mid(id);
mnewline(&test,id);
break;
case 3 :
printf("Lire un element.\n");
mid(id);
printf("Position de l element : ");
scanf("%d",&pos1);
temp[0]=mget(test,id,pos1);
printf("%c -- a ete recuperer.\n",*temp);
break;
case 4 :
printf("Lire une chaine.\n");
mid(id);
printf("Borne -- max 10 : ");
scanf("%d %d",&pos1,&pos2);
mmget(test,id,pos1,pos2,temp);
printf("%s -- a ete recuperer.\n",*temp);
break;
case 5 :
printf("Ecrire un caractere.\n");
mid(id);
printf("Position de l element : ");
scanf("%d",&pos1);
printf("Entrer le caractere :");
scanf("%c",&temp);
mput(&test,id,pos1,*temp);
printf("%s -- a ete recuperer.\n",temp);
break;
case 6 :
printf("Ecrire une chaine de caractere.\n");
mid(id);
printf("Borne -- max 10 : ");
scanf("%d %d",&pos1,&pos2);
printf("Entrer la chaine : ");
scanf("%s",&temp);
mmput(&test,id,pos1,pos2,temp);
printf("%s -- a ete recuperer.\n",temp);
break;
case 7 :
printf("Effacer une ligne");
mid(id);
mdelline(&test,id);
break;
case 8 :
printf("Merci et a bientot");
break;
}
if (choix!=8){
printf(" 1. Lire une ligne\n");
printf(" 2. Cree une ligne\n 3. Lire un element
d une ligne \n 4. Lire une chaine d une ligne\n");
printf(" 5. Ecrire un caractere dans une ligne
a une position precise\n");
printf(" 6. Ecrire une chaine de caractere ds
une ligne a une position precise \n");
printf(" 7. Effacer une ligne\n 8. Quitter\n");
}
}
void mprintline(mat matrice, char id[10]){
int ligne;
ligne=ch_id(matrice,id);
printf("%s \n",matrice.valeur[ligne]);
}
int ch_id(mat matrice,char id[10])
{
int i,j;
for (j=0;j<=matrice.effectif;j++){
i=0;
while (strcmp(&matrice.valeur[j][i],&id[i])==0 && i<=9) i++;
if (i==10) break;
}
Le menu fonctionne, Attention quand même, c'est bugué, lisez les autres messages (Marc
Boyer). Bah, que je me trompe ne peux déranger un babar ...
Pas de souci de se coté je me trompe moi meme assez souvent :)
Harpo
babar wrote:
int main() { int i,choix,pos1,pos2; char id[10],temp[10]; mat test; test.effectif=0; for (i=0;i<P;i++)test.teffectif[i]=0;
Manque ');' à la fin de la ligne.
(...)
je reconnais que le 50 devrai etre 49, mais je ne vois pas ou le ); est manquant
Il ne l'est pas en effet, j'ai mal lu la ligne, je ne suis pas un compilateur... Il faut dire qu'elle est très difficile à lire, tu sembles ne pas aimer les gens qui auraient à maintenir ton code, quelque chose de plus lisible et correct serait : for (i=0; i < 50; i++) { test.teffectif[i] = 0; } bien qu'il y ait plus simple et plus concis.
case 4 : printf("Lire une chaine.n"); mid(id); printf("Borne -- max 10 : "); scanf("%d %d",&pos1,&pos2); mmget(test,id,pos1,pos2,temp); printf("%s -- a ete recuperer.n",*temp);
temp est défini comme 'char temp[10]' *temp est donc un char, or %s demande une chaîne. Etc...
je demande l affichage du tableau de caractere entier, il me semblait
que c'etait le moyen de le faire.
Il ne me semble pas que cela le soit.
ce programme se compile
Pas chez moi.
et s exécute correctement
Je ne suis pas allé jusque là.
en affichant bien le mot et la premiere lettre du mot
Je pense qu'il faut lire les messages du compilateur qui doit dire à peu près la même chose que moi.
l autre programme se compile aussi sans erreur le probleme est
ailleur, lorsque je demande de lire une ligne il me renvoi rien ou (null).
Y'a donc un problème.
-- http://harpo.free.fr/
babar wrote:
int main()
{
int i,choix,pos1,pos2;
char id[10],temp[10];
mat test;
test.effectif=0;
for (i=0;i<P;i++)test.teffectif[i]=0;
Manque ');' à la fin de la ligne.
(...)
je reconnais que le 50 devrai etre 49, mais je ne vois pas ou le );
est manquant
Il ne l'est pas en effet, j'ai mal lu la ligne, je ne suis pas un
compilateur...
Il faut dire qu'elle est très difficile à lire, tu sembles ne pas aimer
les gens qui auraient à maintenir ton code, quelque chose de plus
lisible et correct serait :
for (i=0; i < 50; i++) {
test.teffectif[i] = 0;
}
bien qu'il y ait plus simple et plus concis.
case 4 :
printf("Lire une chaine.n");
mid(id);
printf("Borne -- max 10 : ");
scanf("%d %d",&pos1,&pos2);
mmget(test,id,pos1,pos2,temp);
printf("%s -- a ete recuperer.n",*temp);
temp est défini comme 'char temp[10]' *temp est donc un char, or %s
demande une chaîne.
Etc...
je demande l affichage du tableau de caractere entier, il me semblait
que c'etait le moyen de le faire.
Il ne me semble pas que cela le soit.
ce programme se compile
Pas chez moi.
et s exécute correctement
Je ne suis pas allé jusque là.
en affichant bien le
mot et la premiere lettre du mot
Je pense qu'il faut lire les messages du compilateur qui doit dire à
peu près la même chose que moi.
l autre programme se compile aussi sans erreur le probleme est
ailleur, lorsque je demande de lire une ligne il me renvoi rien ou
(null).
int main() { int i,choix,pos1,pos2; char id[10],temp[10]; mat test; test.effectif=0; for (i=0;i<P;i++)test.teffectif[i]=0;
Manque ');' à la fin de la ligne.
(...)
je reconnais que le 50 devrai etre 49, mais je ne vois pas ou le ); est manquant
Il ne l'est pas en effet, j'ai mal lu la ligne, je ne suis pas un compilateur... Il faut dire qu'elle est très difficile à lire, tu sembles ne pas aimer les gens qui auraient à maintenir ton code, quelque chose de plus lisible et correct serait : for (i=0; i < 50; i++) { test.teffectif[i] = 0; } bien qu'il y ait plus simple et plus concis.
case 4 : printf("Lire une chaine.n"); mid(id); printf("Borne -- max 10 : "); scanf("%d %d",&pos1,&pos2); mmget(test,id,pos1,pos2,temp); printf("%s -- a ete recuperer.n",*temp);
temp est défini comme 'char temp[10]' *temp est donc un char, or %s demande une chaîne. Etc...
je demande l affichage du tableau de caractere entier, il me semblait
que c'etait le moyen de le faire.
Il ne me semble pas que cela le soit.
ce programme se compile
Pas chez moi.
et s exécute correctement
Je ne suis pas allé jusque là.
en affichant bien le mot et la premiere lettre du mot
Je pense qu'il faut lire les messages du compilateur qui doit dire à peu près la même chose que moi.
l autre programme se compile aussi sans erreur le probleme est
ailleur, lorsque je demande de lire une ligne il me renvoi rien ou (null).
Y'a donc un problème.
-- http://harpo.free.fr/
Emmanuel Delahaye
Malgres la bonne dizaine de message qui traite le sujet ici, j'ose quand meme demander un peu d aide parce que je ne comprend pas pourquoi mon code ne marche pas.
merci de bien vouloir regarder ce code et me signaler ce qui vous semble incorrect.
Ca déjà...
Compiling: main.c main.c: In function `main_': main.c:65: warning: format argument is not a pointer (arg 2) main.c:73: warning: char format, different type arg (arg 2) main.c:74: warning: passing arg 4 of `mput' with different width due to prototype main.c:83: warning: char format, different type arg (arg 2) main.c: In function `mid': main.c:110: warning: char format, pointer arg (arg 2) main.c: In function `mmget': main.c:131: warning: passing arg 3 of `strncpy' as unsigned due to prototype main.c:176:2: warning: no newline at end of file main.c: In function `mid': main.c:128: error: prior parameter's size depends on 'pos2' main.c:128: error: prior parameter's size depends on 'pos1' main.c:134: error: prior parameter's size depends on 'pos2' main.c:134: error: prior parameter's size depends on 'pos1' Process terminated with status 1 (0 minutes, 0 seconds) 4 errors, 7 warnings
-- A+
Emmanuel Delahaye
Malgres la bonne dizaine de message qui traite le sujet ici, j'ose quand
meme demander un peu d aide parce que je ne comprend pas pourquoi mon
code ne marche pas.
merci de bien vouloir regarder ce code et me signaler ce qui vous semble
incorrect.
Ca déjà...
Compiling: main.c
main.c: In function `main_':
main.c:65: warning: format argument is not a pointer (arg 2)
main.c:73: warning: char format, different type arg (arg 2)
main.c:74: warning: passing arg 4 of `mput' with different width due to
prototype
main.c:83: warning: char format, different type arg (arg 2)
main.c: In function `mid':
main.c:110: warning: char format, pointer arg (arg 2)
main.c: In function `mmget':
main.c:131: warning: passing arg 3 of `strncpy' as unsigned due to prototype
main.c:176:2: warning: no newline at end of file
main.c: In function `mid':
main.c:128: error: prior parameter's size depends on 'pos2'
main.c:128: error: prior parameter's size depends on 'pos1'
main.c:134: error: prior parameter's size depends on 'pos2'
main.c:134: error: prior parameter's size depends on 'pos1'
Process terminated with status 1 (0 minutes, 0 seconds)
4 errors, 7 warnings
Malgres la bonne dizaine de message qui traite le sujet ici, j'ose quand meme demander un peu d aide parce que je ne comprend pas pourquoi mon code ne marche pas.
merci de bien vouloir regarder ce code et me signaler ce qui vous semble incorrect.
Ca déjà...
Compiling: main.c main.c: In function `main_': main.c:65: warning: format argument is not a pointer (arg 2) main.c:73: warning: char format, different type arg (arg 2) main.c:74: warning: passing arg 4 of `mput' with different width due to prototype main.c:83: warning: char format, different type arg (arg 2) main.c: In function `mid': main.c:110: warning: char format, pointer arg (arg 2) main.c: In function `mmget': main.c:131: warning: passing arg 3 of `strncpy' as unsigned due to prototype main.c:176:2: warning: no newline at end of file main.c: In function `mid': main.c:128: error: prior parameter's size depends on 'pos2' main.c:128: error: prior parameter's size depends on 'pos1' main.c:134: error: prior parameter's size depends on 'pos2' main.c:134: error: prior parameter's size depends on 'pos1' Process terminated with status 1 (0 minutes, 0 seconds) 4 errors, 7 warnings
-- A+
Emmanuel Delahaye
Harpo
Emmanuel Delahaye wrote:
Process terminated with status 1 (0 minutes, 0 seconds)
Il ne perd pas son temps, lui !
-- http://harpo.free.fr/
Emmanuel Delahaye wrote:
Process terminated with status 1 (0 minutes, 0 seconds)
Alors élève le niveau de diagnostic de ton compilateur.
C'est une réponse diplomatique. Je dirais : 'change de compilateur', il n'est pas normal qu'un compilateur compile un code grossièrement erroné sans signaler d'erreur.
-- http://harpo.free.fr/
Emmanuel Delahaye wrote:
Alors élève le niveau de diagnostic de ton compilateur.
C'est une réponse diplomatique.
Je dirais : 'change de compilateur', il n'est pas normal qu'un
compilateur compile un code grossièrement erroné sans signaler
d'erreur.
Alors élève le niveau de diagnostic de ton compilateur.
C'est une réponse diplomatique. Je dirais : 'change de compilateur', il n'est pas normal qu'un compilateur compile un code grossièrement erroné sans signaler d'erreur.
-- http://harpo.free.fr/
Pierre Maurette
Emmanuel Delahaye wrote:
Alors élève le niveau de diagnostic de ton compilateur.
C'est une réponse diplomatique. Je dirais : 'change de compilateur', il n'est pas normal qu'un compilateur compile un code grossièrement erroné sans signaler d'erreur. Le code initial proposé par babar compile sans warning sous gcc 3.4.4
de code::blocks, sous XP x64, avec les paramètres proposés par défaut par l'IDE. Après un simple copié-collé, et une seule ligne à remettre d'un seul tenant. Pas d'autre outil pour tester, j'ai cassé de la bécane.
-- Pierre Maurette
Emmanuel Delahaye wrote:
Alors élève le niveau de diagnostic de ton compilateur.
C'est une réponse diplomatique.
Je dirais : 'change de compilateur', il n'est pas normal qu'un
compilateur compile un code grossièrement erroné sans signaler
d'erreur.
Le code initial proposé par babar compile sans warning sous gcc 3.4.4
de code::blocks, sous XP x64, avec les paramètres proposés par défaut
par l'IDE. Après un simple copié-collé, et une seule ligne à remettre
d'un seul tenant.
Pas d'autre outil pour tester, j'ai cassé de la bécane.
Alors élève le niveau de diagnostic de ton compilateur.
C'est une réponse diplomatique. Je dirais : 'change de compilateur', il n'est pas normal qu'un compilateur compile un code grossièrement erroné sans signaler d'erreur. Le code initial proposé par babar compile sans warning sous gcc 3.4.4
de code::blocks, sous XP x64, avec les paramètres proposés par défaut par l'IDE. Après un simple copié-collé, et une seule ligne à remettre d'un seul tenant. Pas d'autre outil pour tester, j'ai cassé de la bécane.