|
|
|
|
D'accord , bon maintenant j'ai un petit soucis d'affichage , mon programme doit afficher ceci :
|
La variable INDEXMAXTAB indiquait juste la valeur max du nombre d'élément que tu as dans ton tableau.
|
Je ne comprends vraiment pas , le but de l'exo c'est de faire un programme qui affiche la longueur des mots reçu en entrée , donc à l'écran je dois avoir çà comme résultat :
|
De toute façon tu n'as pas d'autres choix que d'afficher le nombre de _ que tu retrouves dans ton tableau.
|
Alors en français mon algorithme donne donc :
|
Ce que je te conseille c'est de prendre l'exemple suivant et de l'écrire entièrement en écrivant tout se qui se passe a chaque étapes.
|
J'ai pas le droit d'utiliser les mots false .... , j'ai uniquement droit à printf c'est tout , rien d'autre ( hormis les boucles ... ) .
|
Que penses tu de ce code ( je galère avec les { } :
|
C'est une des autres facon que je comptait te presenter pour resoudre ton probleme. Ton cobde me parait plutot bien. Le seul inconvenient est que tu ne geres par le retour a la ligne quand tu as fini de traiter les index de ton tableau.
|
Voici le code complet du programme qui affiche l'histogramme des longueurs des mots rencontrés en entrée , ya forcément un problème avec les { } :
#include <stdio.h>
int main(void)
{
int a;
int nlettre[10];
int nl = 0;
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
nl=0
else
nl++;
nlettre[nl]++;
}
for ( int j = 0; j < 10; j++)
printf("%d :", j);
for ( int i=0; i<nlettre[j]; i++)
printf("_");
return 0;
il manque forcément des { } quelquepart , je ne sais pas où les placer car je n'ai jamais fait 2 boucles for à la suite , ( j'ai demandé de l'aide pour écrire ces 2 boucles mais on m'a pas trop expliqué le principe de 2 boucles for ) , ceci dit je comprends fort bien le principe de 1 boucle , while ou for , mais un for dans un for j'ai jamais vu ... |
Le principe des boucles for imbriquees ou non et toujours le meme. Tu dois mettre entre accolades le code correspondant a toutes las actions qui doivent etre accomplies dans ta/tes boucles. Il est dit que si 1 seule action doit etre effectuee il n'y a pas besoin d'accolade neanmoins les mettre te permet d'etre sur de ne rien oublier
for ( int j = 0; j < 10; j++) {
printf("%d :", j);
for ( int i=0; i<nlettre[j]; i++) {
printf("_");
}
}
Penses par contre a ajouter un printf("\n"); dans ton code pour aller a la ligne. Stef |
#include <stdio.h>
int main(void)
{
int a;
int nlettre[10];
int nl = 0;
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
nl=0
else
nl++;
nlettre[nl]++;
}
for ( int j = 0; j < 10; j++)
{
printf("%d :", j);
for ( int i=0; i<nlettre[j]; i++)
{
printf("_");
}
}
return 0;
}
return 0;
j'ai bien fait ce que tu m'as dit pour les accolades , et à la copilation j'ai ceci : ligne 21 : 'for' loop initial declaration used outside C99 mode ligne 24: 'for' loop initial declaration used outside C99 mode je savais bien qu'il y allait avoir une erreur car mon code dans emacs n'est pas bien aligné dans les boucles for :-) |
Oh la la , mdr on va jamais yarriver , ave ce code ( bon ) :
#include <stdio.h>
int main(void)
{
int a;
int nlettre[10];
int nl = 0;
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
nl=0
else
nl++;
nlettre[nl]++;
}
int j;
for ( j = 0; j < 10; j++)
{
printf("%d :", j);
int i;
for ( i=0; i<nlettre[j]; i++)
{
printf("_");
}
}
return 0;
}
avec çà j'obtiens un défilement de _ _ _ _ _ _ _ _ qui ne s'arrête jamais :-) |
Premier conseil, initialises ton tableau car par défaut les valeur associées aux index de ton tableau peuvent êre très importante.
for ( j = 0; j < 10; j++) {
nlettre[j]=0;
}
ensuite c'est bon je crois. Voila tout le code reformaté chez moi qui fonctionne
#include <stdio.h>
int main(void) {
int a, i, j;;
int nlettre[10];
int nl = 0;
for ( j = 0; j < 10; j++) {
nlettre[j]=0;
}
while ( ( a = getchar() ) != EOF) {
if ( a == ' ' || a == '\n' || a == '\t' )
nl=0;
else
nl++;
nlettre[nl]++;
}
for ( j = 0; j < 10; j++) {
printf("%d :", j);
for ( i=0; i<nlettre[j]; i++) {
printf("_");
}
}
return 0;
}
|
Je viens de reprendre le code car il y avait quelques petits soucis avec la prise de la phrase en utilisant getchar (chez moi j'utilisais un tableau char tab[]. Voila ce que ça donne:
#include <stdio.h>
int main(void) {
int a;
int nlettre[10];
int pl =0, nl = 0;
int i, j, k;
char tc[80];
for ( j = 0; j < 10; j++) {
nlettre[j]=0;
}
a = getchar();
while ( a != '\n' ) {
tc[k]=a;
if ( tc[k] == ' ' || tc[k] == '\n' || tc[k] == '\t' )
nl=0;
else
pl = ++nl;
if(nl == 0)
nlettre[pl]++;
k++;
a=getchar();
}
nlettre[pl]++;
for ( j = 0; j < 10; j++) {
printf("%d :", j);
for ( i=0; i<nlettre[j]; i++) {
printf("_");
}
printf("\n");
}
return 0;
}
Je l'ai testé en écrivant la phrase suivante: je suis a ecole dans un pré avec des oiseaux résultat: 0 : 1 :_ 2 :__ 3 :__ 4 :___ 5 :_ 6 : 7 :_ 8 : 9 : Voila, Stef |