Problème de taille de tableau
Bonjour, j'ai un problème dans le traitement de chaine de caractères.
A l'aide de printf j'affiche les caractères contenus dans le tableau mais j'ai des valeurs incohérentes à la fin, et surtout la boucle continue après la fin de la chaine et je comprends pas pourquoi.
Quelqu'un peut-il m'éclairer ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
int main(int argc, char *argv[]){
int i=0, j=0;
char tab[100];
char tab_ss[100];
printf("Entrez le mot ou la phrase a tester suivi de 0 :\n");
fgets(tab, sizeof tab, stdin);
/* Copie les caractères de tab dans tab_ss sans espaces */
while(tab[i] != '0'){
if(tab[i] != ' '){
tab_ss[j]=tab[i];
++j;
}
++i;
}
/* Affiche la chaine de caracteres sans espaces */
i=0;
while(tab[i] != '0'){ printf("%c", tab[i]); ++i; }
printf("\n");
return 0;
} |
Re: Problème de taille de tableau
Citation:
Envoyé par k-nine
Bonjour, j'ai un problème dans le traitement de chaine de caractères.
A l'aide de printf j'affiche les caractères contenus dans le tableau mais j'ai des valeurs incohérentes à la fin, et surtout la boucle continue après la fin de la chaine et je comprends pas pourquoi.
Sans doute une chaine mal formée (absence de 0 final).
Citation:
Quelqu'un peut-il m'éclairer ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
main.c: In function `main_':
main.c:7: error: implicit declaration of function `printf'
main.c:7: warning: nested extern declaration of `printf'
<internal>:0: warning: redundant redeclaration of 'printf'
main.c:8: error: implicit declaration of function `fgets'
main.c:8: warning: nested extern declaration of `fgets'
main.c:8: error: `stdin' undeclared (first use in this function)
main.c:8: error: (Each undeclared identifier is reported only once
main.c:8: error: for each function it appears in.) |
Et si tu postais la version compilable ?
J'ai comme l'impression que tu confonds '0' et 0. fgets() mets un 0 automatiquement à la fin de la chaine saisie. Il n'y a pas à saisir de 0 supplémentaire. Par contre, si tu fais une copie en éliminant les espaces redondants, il faut penser à terminer la chaine par un 0 (et non un '0').
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#include <stdio.h>
int main (int argc, char *argv[])
{
int i = 0, j = 0;
char tab[100];
char tab_ss[sizeof tab];
printf ("Entrez le mot ou la phrase a tester :\n");
fgets (tab, sizeof tab, stdin);
/* Copie les caractères de tab dans tab_ss sans espaces */
while (tab[i] != 0)
{
if (tab[i] != ' ')
{
tab_ss[j] = tab[i];
++j;
}
++i;
}
tab_ss[j] = 0;
/* Affiche la chaine de caracteres sans espaces */
i = 0;
putchar ('\'');
while (tab_ss[i] != 0)
{
putchar (tab_ss[i]);
++i;
}
printf ("'\n");
return 0;
} |