CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

pause en C

patopato
patopato
Niveau 3
23 avril 2008 à 15:18:22

slt voila j'aurai aimer savoir comment faire des pauses où c'est nous qui choisissons le temps de pause ??

merci

FlyingPhantom01
FlyingPhantom01
Niveau 10
23 avril 2008 à 15:50:58

Une méthode bien bourrine : tu laisses l'ordi calculer dans le vide.

void sleep(int temps){
int i;
for(i=0;i<=temps;i++){}
//on attend
}

Longtemps que j'ai plus fait de C, hein, alors faudra vérifier la syntaxe !
Sinon, y a sleep() de Windows, que tu peux utiliser. :)

:ok:

SimRack-
SimRack-
Niveau 10
23 avril 2008 à 15:51:57

Pour faire une pause tu dois mettre:

system("PAUSE");

Et là le programme stoppera tant que tu n'aura pas appuyé sur entré.

Sinon pour faire une pause durant un temps donné c'est:

sleep(x);

ou x est le temps de pause en milliseconde.

( N'oublie pas de noter:

  1. include <unistd.h>

au début du programme, sinon ça marchera pas).

:ok:

SimRack-
SimRack-
Niveau 10
23 avril 2008 à 15:54:03

Ah bon? La fonction sleep fait partit de windows.h?
Au temps pour moi, il faut donc mettre:

  1. include <windows.h>

Fin essaye les deux, me souviens plus trop c'est laquelle.

guyver2
guyver2
Niveau 10
23 avril 2008 à 17:40:54

sleep est bien dans unistd.h http://www.opengroup.org/onlinepubs/009695399/functions/sleep.html

le truc c'est que unistd.h n'existe pas pour windows donc il faut chercher ailleurs les fonctions. Et sleep se retrouve dans windows.h mais avec un S majuscule
http://msdn2.microsoft.com/en-us/library/ms686298(VS.85).aspx

voila qui devrait éclaircir les choses :)

sinon le coup de la boucle vide de flyingphantom n'est pas bonne (et même pire qu'il ne le dit) puisque les compilateurs repèrent ce genre de chose et les virent du programme.

FlyingPhantom01
FlyingPhantom01
Niveau 10
23 avril 2008 à 19:26:02

C'est un truc bourrin, et je l'ai bien noté... (c'est d'ailleurs ce que je faisais dans ces cas avec ma TI) :)
Par contre, je savais pas que les compilateurs étaient si sélectifs... Longtemps aussi que je travaille en interprété ! :rire:

:ok:

patopato
patopato
Niveau 3
23 avril 2008 à 19:27:27

Ah ok d'accord merci bcp :D

Mais il n'existe rien pour faire une pause qui marche sur linux et sur Windows ?

elhuron
elhuron
Niveau 6
23 avril 2008 à 19:52:44

Si :

  1. if defined WIN32

....#include <windows.h>

  1. elif defined linux

....#include <truc.h>

  1. endif

Pareil pour l'emploi des fonctions propres a chacun.

guyver2
guyver2
Niveau 10
23 avril 2008 à 20:43:23

profitant que tu parle de ça Elhuron :

est-il possible de faire un truc du genre :

  1. if defined WIN32

....#include <windows.h>
....#define Sleep dormir

  1. elif defined linux

....#include <truc.h>
....#define sleep dormir

  1. endif

de maniere a ne pas avoir besoin de remetre de #if dans la suite du programme là où les fonctions propres aux OS sont appelées ?

(comme ça ou autrement, je suis pas un dieu du #define :) )

patopato
patopato
Niveau 3
23 avril 2008 à 22:54:03

Excusez moi mais en fait moi je suis débutant :D

Comment on utilise ?

  1. if defined WIN32

....#include <windows.h>

  1. elif defined linux

....#include <truc.h>

  1. endif
dnob700
dnob700
Niveau 10
23 avril 2008 à 23:08:52

tu prend ce qu'a donné guyver, tu remplace les ... par des tabulation (c'est juste sur pour la mise en page sur le forum) et tu mets ça au début de ton fichier source ou alors dans un en tête.

tu remplace truc.h par unistd.h et tu remplace sleep (la version avec le s minuscule) par usleep car usleep sous linux et Sleep sous windows utilisent des millisecondes.

Et pour faire une pause tu fait :
dormir(1000);
par exemple

patopato
patopato
Niveau 3
24 avril 2008 à 00:21:54

Merci :D J'ai essayé mais ça n'a pas marché :S

C'est quoi des tabulation ? c'est juste la touche tab ?

Xillion
Xillion
Niveau 8
24 avril 2008 à 01:40:51

Oui, ça fait un espèce de "grand espace".

guyver2
guyver2
Niveau 10
24 avril 2008 à 09:27:03

@dnob :
usleep prend des MICROsecondes (le u est là pour le "mu" de micro) enfin je te dis ça mais ça doit juste etre une erreur d'inatention de ta part.
sleep par contre prend des secondes donc j'imagine que pour avoir une fonction "dormir" utilisable de la meme facon sur linux et windows, il faut faire une sorte de macro du genre:

  1. if defined WIN32

....#include <windows.h>
....#define Sleep dormir

  1. elif defined linux

....#include <unistd.h>
....#define usleep(x) dormir(1000*x)

  1. endif

est-ce correct ?

patopato
patopato
Niveau 3
24 avril 2008 à 19:21:25

Ca ne marche toujours pas :S

Pouvez vous me montrer un petit code vite fait que vous faites a l'arrache svp ? :D

guyver2
guyver2
Niveau 10
24 avril 2008 à 19:25:30

dis nous ce qui ne marche pas, deja ça aidera. Si ça ne compile pas, donne nous les erreurs aisni que la partie du code concernée. Si ça ne s'execute pas comme tu voudrais, dis nous ce que tu attendais et ce qui se passe.

Sinon, si tu regardes mon dernier post, tu remarqueras un "?" en bas, je serais toi, je laisserais "Sleep" et "windows.h" (si tu es sous windows) en attendant que quelqu'un vienne confirmer ou non ce qui a été dis plus haut.

patopato
patopato
Niveau 3
24 avril 2008 à 20:43:46
  1. include <stdio.h>
  2. include <stdlib.h>
  1. if defined WIN32

....#include <windows.h>
....#define Sleep dormir

int main ()
{
printf("test ...");
dormir(3);
printf("...1,2,3");

return 0;
}

Bon par exemple j'ai mis ça mais avec les tabulation a la place des ....

Ca me met que dormir was not declared in this scope

dnob700
dnob700
Niveau 10
24 avril 2008 à 20:55:50

je me demande si la variable ne s'appelle pas __WIN32__ ou quelque chose comme ça (en tout cas, je crois me souvenir que ça dépend du compilo), et peut-être même qu'elle est défini par windows.h ... insoluble.

patopato : commence par fermer le "#if defined" avec un "#endif".
remplace le "#elif" des exemple par un "#else" quivi d'n "#if" qui est la bonne syntaxe et remplace "linux" par "__LINUX__"

  1. if defined WIN32

....#include <windows.h>
....#define dormir(x) Sleep(x)

  1. else
  2. ...if defined linux

........#include <unistd.h>
........#define dormir usleep(1000*x)

  1. ...endif
  2. endif

(Ah oui, il faut inverser les arguments pour les macro par rapport à ce qu'a mis guyver, c'est la source de ton problème)

Et là, ça pourrait fonctionner.

Mais tu peut aussi lire un cours de C, qui t'apprendra à te servir du préprocesseur.

"usleep prend des MICROsecondes" : oui ben j'en était sûr, alors j'ai regardé dans le man avant d'écrire une connerie et là, il y avait marqué que çe prennait des milliseconde... Maintenant je re-regarde et il y a marqué que ça prend des microseconde. Je pense que les pages de man se fiche de moi ... N'empêche comme Sleep prend des milliseconde quand même, il reste un problème.

guyver2
guyver2
Niveau 10
24 avril 2008 à 23:34:05

il manque pas un (x) apres dormir dans le cas linux ?
........#define dormir(x) usleep(1000*x)
plutot que
........#define dormir usleep(1000*x)
?

et que veux tu dire par "N'empêche comme Sleep prend des milliseconde quand même, il reste un problème."

Sleep(x) et usleep(1000*x) doivent revenir au meme non ?

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment