Besoin d'aide pour exo en c

Fermé
pif - 7 déc. 2007 à 18:29
 pif - 8 déc. 2007 à 10:50
Bonjour a tous,

je suis en train d' apprendre le language C, mais je bloque sur un exo.
Si quelqu'un pouvait m'aider, ça serait sympa.

Voici le sujet:

Ecrire un programme qui lit une ligne tapée au clavier et affiche en majuscules les initiales des mots qu'elle contient

en entrée ----> exemple de texte avec des minuscules et des espaces

en sortie ---->EDTADMEDE


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

int main ()
{
char clavier[100];
char str[100];
char * pch;
char * separateur= ",";
char mot1;
char mot2;


printf("Entrer votre texte\n");
scanf("%s",&clavier);
printf("\n");
pch = strtok (clavier,separateur);
while (pch != NULL)
{
mot1=pch[0];
mot2=toupper(mot1);
printf ("%c",mot2);
pch = strtok (NULL,separateur);
}

printf("\n");
system("pause");
return 0;

Mon souci est que ce programme fonctionne si je met comme separateur une virgule, mais je bloque pour remplacer la virgule par l'espace

Merci par avance

Dev C++

2 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
8 déc. 2007 à 00:00
Salut,

essaie ça
#include<stdio.h>
#define DEDANS 1
#define DEHORS 0

int main ()
{
  int c, test;
  test = DEHORS;

  while((c=getchar()) != EOF){
    if(c==' ' || c == '\t' || c == '\n')
      test = DEHORS;
    else if(test == DEHORS){
            test = DEDANS;
            printf("%c",toupper(c));
    }
  }
  return 0;
}
0
Tout d'abord, merci pour ta reponse, cela fonctionne tres bien. Quand j'aurai 5 min j'essayerai de comprendre ton prog.
0
Bonjour

Ton programme est presque parfait, mais scanf ("%s",&clavier) arrête l'analyse sur le 1er espace ! donc clavier ne centient que le début de ta ligne jusqu'au 1er espace
remplace par gets(clavier) qui lit tout jusqu'à la fin de la ligne
0
Merci pour ton explication. la modif est concluante.
0