Pause sous UNIX

Résolu
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
-
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
-
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

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
5
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é.
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
1
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 !
------------------------------------------------------------------------------
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
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
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
3
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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Et pourquoi ne peux tu pas utiliser system("pause");?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
1
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 !
------------------------------------------------------------------------------
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
3
system ("pause"); c'est pour Win comme system ("commande MS-DOS");
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Je penseais que la commande pause existait sous UNIX. Dans ce cas ya pas une commande équivalente?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
#include <stdio.h>

D@runia
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
3
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.
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
Prefere quand meme le code de steve : plus propre !!!

D@runia