1 mot par ligne en C

jeff -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour , en C j'ai ceci :

écrire un programme qui affiche son entrée à raison de 1 mot par ligne , voici mon code :

int main(void)
{
int c;

while ((c=getchar()) != EOF)
{
if ( c == ' ')
putchar('\n');
else
putchar(c);
}
return 0;
}


ce programme marche , il me donne çà :

./a.out

salut çà baigne . ( là je tape sur entrée et j'ai çà : )
salut
çà
baigne

mais moi j'aimerais que dès que je tape ma phrase et que je tape sur la touche espace , çà passe directement à la ligne , au lieu de m'écrire la phrase entière et que ensuite en appuyant sur entrée il m'affiche un mot par ligne .
merci de votre aide

4 réponses

  1. Lupin
     
    Salut,

    Je crois que c'est l'approche qu'il faut changer.

    Exemple sous vc++ :

    #include <iostream>	// Charge pour les instructions cout,endl
    #include <conio.h>	// Charge pour l'instruction getch()
    
    char car=0;
    char ligne=0;
    
    int main()
    {
    
    	while ((car = getch()) != '*')
    		{
    		if ( car == ' ') std::cout << "\n";
    		else std::cout << car;
    		}
    	std::cout << "\nTermine" << std::endl;
    	return 0;
    }
    
    


    Ton code cherche la fin de ligne : ((c=getchar()) != EOF)
    Sur une saisie au clavier le "Entrée" fait office de EOF.

    Utilise plutôt un caractère d'arrêt.
    ((c=getchar()) != '*')

    Lupin
    0
  2. jeff
     
    c'est du C que je fais , pas du C++ ...
    0
  3. Lupin
     
    re:

    j'avais compris !

    mais pas de compilateur pour tester ta syntaxe !


    int main(void)
    {
    int c;

    while ((c=getchar()) != '*')
    {
    if ( c == ' ') putchar( c + '\n' );
    else putchar(c);
    }
    return 0;
    }

    Lupin
    0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    De toute façon son code c++ était pas top (variables globales qui n'ont pas lieu d'être, utilisation de conio.h alors que ce n'est pas nécessaire.

    Je tiens à signaler qu'en c++ un header ça s'include sans mettre .h (et si c'est un header C, on le met l'include dans un extern "C" { ...})

    Ensuite je pense que le putchar( c + '\n' ); ne marchera pas car on ne concatène pas des caractères (là ont fait une somme de deux valeurs, donc un caractère qui n'a rien à voir !).

    Il faut à mon avie que tu fasse un fgetc sur stdin et que tu traites s'il s'agit d'un espace, d'un retour chariot etc...

    Bonne chance
    0