Introduire des phrases en C

Résolu/Fermé
Limbergh - 15 févr. 2008 à 20:21
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 15 févr. 2008 à 21:30
Bonsoir,
j'ai fais un code en C pour écrire un mot et puis l'afficher.
Quelqu'un peut-il m'expliquer comment on introduis des phrases
complètes.
Voici mon code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int choix;
int main(int argc, char *argv[]) 
{
do
{

char mot[100];
printf("-1- introduisez un mot\n");
printf("-2- affichez le mot\n");
printf("-0- FIN\n");
scanf("%d", &choix);

switch(choix)
{
case 1:
     
     scanf(" %s", &mot);
     break;
case 2:
     
     printf("%s\n", mot);
     break;

}
}
while(choix!=0);


system("PAUSE");
    return 0;
}


Merci d'avance


Limbergh

12 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 févr. 2008 à 21:18
écrit plutôt comme ça
il faut éviter les variables globales
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int choix;
int
main (int argc, char *argv[])
{
  char mot[100];
  int choix = 1;
  do {
      printf ("-1- introduisez un mot\n");
      printf ("-2- affichez le mot\n");
      printf ("-0- FIN\n");
      printf("Faites votre choix : ");
      scanf ("%d", &choix);
      getchar();
      switch (choix){
        case 1:
          printf("Saisissez le mot/phrase : ");
          fgets(mot,100,stdin);
          break;
        case 2:
          printf ("Vous avez saisi : %s\n", mot);
          break;
      }
  } while (choix != 0);

  system ("PAUSE");
  return 0;
}
3
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 févr. 2008 à 21:01
Utilise plutôt la fonction fgets(char *s,int size, FILE *stream)
dans ton cas ça donne
fgets(mot,100,stdin);
et ne declare pas char mot[100] dans la boucle
2
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 févr. 2008 à 20:35
Salut,

scanf(" %s", &mot);

écrit
scanf("%s", mot);
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 févr. 2008 à 21:04
je vois que tu n'as pas compris ça

scanf("%s", &mot);
mot c'est une chaîne de caractères donc un tableau de caractères en C
mot c'est l'adresse de 1er élément
danc ce cas on ne mets pas & devant

pour scanf il faut savoir que l'espace c'est un séparateur
donc même si tu as declaré char mot[100], scanf s'en fiche complétement, il ne va prendre qu'un seul mot

pour prendre trois mot par exemple il faut utiliser
scanf("%s %s %s",mot1,mot2,mot3);

1

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

Posez votre question
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
15 févr. 2008 à 20:26
Ton code saisit déjà des phrases jusqu'à 100 caractères. (Phrase = mots séparés par des espaces)
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
15 févr. 2008 à 20:31
ok,
mais quand j'introduis une phrase, il ne m'affiche que le dernier mot
et je ne vois pas pourquoi???
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
15 févr. 2008 à 20:40
Je viens de le faire et ça ne change rien. J'ai toujours le dernier mot
qui s'affiche
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
15 févr. 2008 à 20:53
Donc, je ne vois pas ce qu'il faut faire pour afficher une phrase à l'écran

revoici mon code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int choix;
int main(int argc, char *argv[]) 
{
do
{

char mot[100];
printf("-1- introduisez un mot\n");
printf("-2- affichez le mot\n");
printf("-0- FIN\n");
scanf("%d", &choix);

switch(choix)
{
case 1:
     
     scanf(" %s", &mot);
     break;
case 2:
     
     printf("%s\n", mot);
     break;

}
}
while(choix!=0);


system("PAUSE");
    return 0;
}


merci d'avance
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
15 févr. 2008 à 21:14
rebonsoir,
j'ai mis ce que tu m'as dit mais maintenant il ne m'affiche plus le premier mot.
Je te remet mon code, j'ai peut-être fait une erreur???

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char mot[100];
int choix;
int main(int argc, char *argv[]) 
{
do
{



printf("-1- introduisez un mot\n");
printf("-2- affichez le mot\n");
printf("-3- introduisez des numeros de tableau\n");
printf("-0- FIN\n");
scanf("%d", &choix);
getchar();

switch(choix)
{
case 1:
     
     scanf("%s", mot);
     fgets(mot,100,stdin);
     break;
case 2:
     
     printf("%s\n", mot);
     break;
default :
        break;


}
}
while(choix!=0);


system("PAUSE");
    return 0;
}


Encore merci pour tout, c'est d'ailleurs pas la première fois...
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
15 févr. 2008 à 21:21
merci pour ton aide...
Tu sais juste encore m'expliquer ce que viens faire le getchar()...
Après j'arrête de t'ennuyer!!!
Bon sans blaguer, merci d'avance


Limbergh
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
15 févr. 2008 à 21:24
getchar(); lit le caractère '\n' qui traine dans le buffer
sinon tu ne pourras pas saisir le mot ou la phrase
tu peux enlever getchar(); pour voir

quand tu entre la valeur de choix qui est un entier tu appuies sur ENTREE pour continuer
c'est à ce moment que le caractère '\n' traine
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
15 févr. 2008 à 21:30
merci pour tout
0