Pause sous UNIX

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 9 août 2006 à 10:03
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 9 août 2006 à 12:30
Bonjours,

Bon tout d’abor je tiens à dire que j'ai lut ce qui s'est dit sur le sujet dans
le forum mais ce que je veut n'est pas dispo (ce n’est pas une pause d’un certain
temps que je veut).

Voila mon problème :

Mon programme s'exécute en mode texte et des argument sont obligatoire. Si on
lance mon programme sans argument j'affiche la liste des arguments utilisable,
problème ce texte fais plus de deux page d'affichage donc pour permettre la
lecture de ce texte je souhaite faire un équivalent de « system("PAUSE"); ».
Pour le moment je fais cas :

printf("Appuyez sur 'Entrée' pour continuer.");

getchar();

Mais le fonctionnement ne me conviens pas vraiment car si mon utilisateur
presse une autre touche que entrée mes "pause" suivante sont passée
(j'ai un très vieux compilo, connais même pas le type bool, je sais pas si cas
à un rapport mais bon je l’indique quand même). Donc voila je cherche soit une équivalence
à system("PAUSE"); soit une fonction qui récupère 1 carac saisi au
clavier (et qui ne l'affiche pas de préférence).

PS : l'insertion de "conio.h" ne fonctionne pas sur mon compilo (en
même temps pour une me*de qui ne connais pas les bool cas ne m'étonne pas).



Merci

------------------------------------------------------------------------------
Ce soir dans "triste monde tragique" :

Des vers qui mangent les programmeurs !
Des virus sorte des ordinateurs et attaque des gents !
------------------------------------------------------------------------------

11 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
9 août 2006 à 11:23
Pas facile de s'en rendre compte mais la commande pause ne sert à rien, c'est pour ca qu'il n'y a pas d'équivalent sous unix.

getchar lit un caractere sur stdin, si tu appuies sur <enter> ca
va lire le '\n', par contre si tu saisies d'autres caractères avant le
<enter> getchar n'en lira qu'un et les autres resteront dans le
flux et seront lu par le prochain getchar (ou autre fgets...).


On peut faire comme ca:

fputs("Appuyez sur 'Entrée' pour continuer.", stdout);


fflush(stdout); /* pour garantir l'affichage avant les saisies sur stdin */


/* pour lire les caracteres restant dans le flux */


{


int c;


while( (c = getchar()) != '\n' && c != EOF );


}

getchar();


Le seul inconvenient c'est que si le flux est vide alors il faudra
appuyer 2 fois sur <enter>, en fait il faudrais prendre pour
habitude de toujours lire ce qui est saisie. Ce probleme n'existe pas
si on a bien compris comment fonctionnent les flux d'entrés, pour
chaque saisie on peut lire avec fgets et continuer à lire tant que le
'\n' n'est pas trouvé.
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
9 août 2006 à 12:30
Ca y est j'ai un "truc" qui fais ce que je veut (sauf que ca affiche ce que l'on tape au clavier mais bon c'est pas bien grave) j'ai fais des petit modif sur le code donné par [auteurdetail.aspx?ID=352727 steve_clamage] et voila ce que ca donne :
void pause (void)
{
int c = 0;
    printf("Appuyez sur 'Entrée' pour continuer.");
    fflush(stdout); /* pour garantir l'affichage avant les saisies sur stdin */
    /* pour lire les caracteres restant dans le flux */
    while((c != '\n') && (c != EOF))
    {
        c = getchar();
        if (c == '\n')
        {
            return;
        }
    }
}

Merci à tous et un grand merci à [auteurdetail.aspx?ID=352727 steve_clamage]

------------------------------------------------------------------------------
Ce soir dans "triste monde tragique" :

Des vers qui mangent les programmeurs !
Des virus sorte des ordinateurs et attaque des gents !
------------------------------------------------------------------------------
3
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
9 août 2006 à 10:27
Le type bool n'existe pas en C, utilise int.
Sinon il arrive que getchar choppe 2 caracteres à la suite (le caractere + retour chariot).
Ce m'est deja arrivé mais je me souvient pu trop ce que j'avais fait ...
Peut etre 2 getchar à la suite, ou un fseek sur stdin ???

D@runia
0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
9 août 2006 à 10:30
salut, je suis sur un systeme linux également.

1) le type bool existe seulement en C++, pas en C, tu peux faire un typedef char bool;
2) getch () marche tres bien sur mon compilo
3) conio.h n'existe pas sous linux (UNIX), à la place il y a le ncurses.h mais elle sont plus chiantes à utiliser.
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 août 2006 à 10:35
Et pourquoi ne peux tu pas utiliser system("pause");?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
9 août 2006 à 10:44
Pour le bool le problème est gérer (je ne savais pas que le bool n'existait que en C++ comme quoi on en apprend tout les jours) j'ai fais un short (c'est vrais qu'un char serais mieux je vais faire la modif)
getch() ne marche pas car conio.h n'existe pas (tout du moin à mon avie) heee, [auteurdetail.aspx?ID=327491 vinc1008881] pourais tu me dire quel include je dois mettre pour getch (ncurses.h peut être ???)
Je n'utilise pas system("pause"); car cas ne marche pas sur UNIX (à moin que je ne fasse erreur mais il ne me semble pas, de toute façon cas ne marche pas chez moi.)
darunia si je met 2 getchar(); à la suite et que mon utilisateur appie sur entrée dés la 1ér fos et que rien ne se passe il ne vas pas être contant et c'est mon chef qui utilisera ce code (et j'aime bien que mon chef soit contant )

------------------------------------------------------------------------------
Ce soir dans "triste monde tragique" :

Des vers qui mangent les programmeurs !
Des virus sorte des ordinateurs et attaque des gents !
------------------------------------------------------------------------------
0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
9 août 2006 à 10:56
system ("pause"); c'est pour Win comme system ("commande MS-DOS");
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 août 2006 à 10:57
Je penseais que la commande pause existait sous UNIX. Dans ce cas ya pas une commande équivalente?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
9 août 2006 à 10:57
#include <stdio.h>

D@runia
0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
9 août 2006 à 11:24
aucune commande équivalente, mais quelqu'un a réussit à en bidouiller une...

#include <stdio.h>
#include <termios.h>

int l_getch ()
{
        static struct termios term, back;
        int ret=-1;

        tcgetattr (0, &term);       /* On recupere les info du terminal */
        memcpy (&back, &term, sizeof(term));

        term.c_lflag &= ~(ICANON|ECHO);    /* On modifie les options du terminal */
        term.c_cc[VTIME] = 0;       /* Temps d'attente infini */
        term.c_cc[VMIN]  = 1;       /* Nombre minimun de caractere */

        tcsetattr(0, TCSANOW, &term);   /* Modif des attribut de stdin */
        ret = getchar();                /* Attente d'un caractere */
        tcsetattr(0, TCSANOW, &back);   /* Restauration des attributs */

        return ret;
}

int main ()
{
l_getch (); /*   = system("pause");
}

et le lien original : http://www.developpez.net/forums/showthread.php?t=1399

il compile bien chez moi en tout cas Ubuntu Dapper drake et mandriva 2006, ce code devrait marcher pour tout systeme avec kernel linux.
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
9 août 2006 à 11:28
Prefere quand meme le code de steve : plus propre !!!

D@runia
0
Rejoignez-nous