Pbm chaine de caracteres

sakura006 -  
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
bonjour tlm,
j'ai un petit souci en C. Je n'arrive pas à afficher une chaîne de caractères qui contient des espaces. J'ai bien créer un tableau de char mais il ne me lit que le 1er mot.
Je travaille sur DevC++ je sais qu'il est pas extra mais j'ai pas eclipse sous la main.
Si kk1 pouvait me donner un coup de main ca serait tres gentil. C'est assez pressé je doit faire un programme pour une entreprise.

Je vous laisse une partie de mon code pour que ca soit plus clair.
Merci.

int main(int argc, char *argv[])
{
// Déclaration des champs :
char motif[1] ;
char code[2] ;
char titre[41] ;

// Instructions Titre Général :
deb_titre: puts("Veuillez rentrer le titre general: ") ;
scanf("%s", &titre) ;
l_titre = strlen(titre) ;
if(l_titre > 40)
{
puts("Vous n'avez pas respecté le nombre de caractères. Veuillez recommencer.") ;
goto deb_titre ;
}
// Majuscules :
char *pString2 = min_maj(titre);
printf("%s\n", pString2);
free(pString2);

printf("%s", titre) ;
A voir également:

5 réponses

lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

c'est normal, puisque tu utilises scanf (qui prends comme séparateur un caractère blanc)

essaie avec gets
gets(titre)
tu ne dois pas utliser &titre puisque le nom de tablea est un pointeur de caractère (dans ton cas titre point sur 1er élément du tableau titre[41] )

tu peux aussi utiliser fgets
0
sakura006
 
j'ai essayé fgets ca m'affiche un msg d'erreur mais g pas essayer de resoudre le pbm.

Par contre avec gets ca marche seulement si j'isole la partie intéressante. Lorsqu'il est dans le code principal je ne peux pas ecrire apres et il passe direct a l'instruction d'apres. :'(
Je te donne la partie du code dans le quel il est.

// Instructions Titre Général :
    deb_titre: puts("Veuillez rentrer le titre general: ") ;
    gets(titre) ;
    fflush(stdin) ;
    printf("%s", titre) ;
    
    l_titre = strlen(titre) ;
    if(l_titre > 40)
    {
        puts("Vous n'avez pas respecté le nombre de caractères. Veuillez recommencer.") ;
        goto deb_titre ;
    }    
    if( l_titre < 40)
    {
        l_space = 40 - l_titre ;
        for( i = 0 ; i < l_space ; i++ )
        {
             space[i] = ' ' ;
        }
    }
             // Majuscules :
             char *pString2 = min_maj(titre);
             printf("%s\n", pString2);    
             free(pString2);

     printf("%s", titre) ;



Merci qd meme de ton aide tres rapide
0
Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
Salut,

Enlève le & dans ton scanf :)

EDIT : Ah bah lamij20 l'a déjà dit !

Si tu peux travailler sur du C++, il y a cin.get aussi comme alternative (+cin.sync)
0
sakura006
 
on m'a dit de ne pas le faire parce ke sinon soit il affiche l'adresse ou bien il y a une erreur.
J'ai quand meme essayé mais ca marche pas.
0
sakura006
 
bon alors j'ai viré tous les scanf qu'ils y avaient dans ttes les lignes de code et je les ai remplacé par des gets et ca marche. J'aimerai juste savoir pkoi le melange scanf et gets n'ai pas possible. C juste dans DevC++ ou c un defaut du C?

En tout cas merci tout le monde pour vos réponses.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

ce n'est pas un défaut de C, c'est plutôt un défaut de comprehension de la part d'utilisateur :-))

quand tu fait gets le buffer va contenir un retour chariot ou EOF
qui sera lu par le prochain scanf par exemple
0