[C] Pourquoi mon programme ne fonctionne pas

badside -  
jisisv Messages postés 3678 Statut Modérateur -
Salut tout le monde,

Je débute dans le C et j'aimerai savoir pourquoi le programme suivant ne fonctionne pas au niveau de la fonction "definebloc" (voir les commentaires à côté de la fonction) :

#include <stdio.h>

#define taille_tableau 10

void definebloc(char tableau_de_char[]);
void affichage(char tableau_de_char[]);

void main(void)
{
char tableau[taille_tableau];

definebloc(tableau);
affichage(tableau);
fflush(stdin);
getchar();
}

void definebloc (char tab[])
{
int i=0;

printf("Introduisez la phrase a encadrer :\n\n");
do
{
fflush(stdin);
scanf("%c",&tab[i]);
i++;
}while(tab[i-1] != '\10'); //PROBLEME : la boucle continue même si j'entre "enter" pour aller à la ligne. Pourtant le code ascii pour aller à la ligne est bien "10".
}

void affichage(char tab[])
{
int i=0;

while(tab[i] != '\10')
{
printf("%c", tab[i]);
i++;
}
}

Merci d'avance pour vos réponses.
Bien à vous.
Badside.

1 réponse

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Ceci fonctionne mieux:
    johand@horus:~/src/c/test$ cat chars.c
    #include <stdio.h>
    
    #define taille_tableau 10
    
    void definebloc(char tableau_de_char[]);
    void affichage(char tableau_de_char[]);
    
    int main(void)
    {
    char tableau[taille_tableau];
    
    definebloc(tableau);
    affichage(tableau);
    fflush(stdin);
    return 0;
    //getchar();
    }
    
    void definebloc (char tab[])
    {
    int i=0;
    
    printf("Introduisez la phrase a encadrer :\n\n");
    do
    {
    fflush(stdin);
    scanf("%c",&tab[i]);
    i++;
    }while(tab[i-1] != '\n'); //PROBLEME : la boucle continue même si j'entre "enter" pour aller à la ligne. Pourtant le code ascii pour aller à la ligne est bien "10".
    }
    
    void affichage(char tab[])
    {
    int i=0;
    
    while(tab[i] != '\n')
    {
    printf("%c\t%d\n", tab[i], tab[i]);
    i++;
    }
    }
    johand@horus:~/src/c/test$ make chars
    cc     chars.c   -o chars
    johand@horus:~/src/c/test$ ./chars
    Introduisez la phrase a encadrer :
    
    azerty
    a       97
    z       122
    e       101
    r       114
    t       116
    y       121
    

     '\010'  est le caractère octal  10 (8 décimal)
    johand@horus:~/src/c/test$ cat mychar.c
    #include <stdio.h>
    
    int main(void)
    {
    char mychar='\010';
    printf("%c==>%d\n", mychar, mychar);
    }
    johand@horus:~/src/c/test$ ./mychar |od -ax
    0000000  bs   =   =   >   8  nl
            3d08 3e3d 0a38
    0000006
    

    Johan
    Gates gave you the windows.
    GNU gave us the whole house.(Alexandrin)
    0