Complément pour mon programe !

Fermé
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 - 6 juil. 2011 à 14:29
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 - 8 juil. 2011 à 00:11
Bonjour,

J'ai écris un programme qui fonctionne, super, mais je voudrai un action supplémentaire et je ne sais pas comment m'y prendre voici le code :

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

int main()
{
	int heure = 0, minute = 0, seconde = 0; 
	printf ("Cette application sert a eteindre l'ordinateur au bout d'un certain temps\n\nEntrez le nombre d'heures\n");
	scanf ("%d", &heure);
	printf ("Le nombre minutes\n");
	scanf ("%d", &minute);
	printf ("Et enfin, le nombre de secondes\n");
	scanf ("%d", &seconde);
	minute = minute + (heure * 60);
	seconde = seconde + (minute * 60);
	while (seconde > 0)
	{
		printf ("Extinction de l'ordinateur dans %d seconde", seconde);
		seconde--;
		Sleep(1000);
		system ("cls");
	}
	system ("shutdown -p");
	return 0;
}



Ce que je voudrais faire : c'est pouvoir au dernier printf qui se situe dans la boucle afficher heure minute seconde.

Merci de répondre rapidement

3 réponses

ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 338
6 juil. 2011 à 18:48
Il te suffit d'abord de compter combien de fois (x) tu peux mettre 60*60 dans seconde. Retire 3600x de seconde puis calcule combien de fois (y) tu peux mettre 60 dans seconde. Retire 60y de seconde puis affiche x=heures, y=minutes, seconde.
0
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 1
7 juil. 2011 à 22:16
Excuser moi mais je n'ai rien compris
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
7 juil. 2011 à 22:32
Ce que tu veux c'est afficher l'heure du système ?

#include <time.h>

time_t tt = time(NULL);
struct tm *t = localtime(&tt);

int h = t->tm_hour;
int m = t->tm_min;
int s = t->tm_sec;

printf("%d:%d:%d\n", h,m,s)
0
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 1
7 juil. 2011 à 23:11
tout ca je l'insère ou?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
7 juil. 2011 à 23:16
Là où tu en as besoin... vu ce que tu demandes je dirai à la fin, entre ton while et ton appel system
0
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 1
7 juil. 2011 à 23:20
est-ce que c'est ca ?

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>

int main()
{
	int heure = 0, minute = 0, seconde = 0; 
	printf ("Cette application sert a eteindre l'ordinateur au bout d'un certain temps\n\nEntrez le nombre d'heures\n");
	scanf ("%d", &heure);
	printf ("Le nombre minutes\n");
	scanf ("%d", &minute);
	printf ("Et enfin, le nombre de secondes\n");
	scanf ("%d", &seconde);
	minute = minute + (heure * 60);
	seconde = seconde + (minute * 60);
	while (seconde > 0)
	{
                time_t tt = time(NULL);
                struct tm *t = localtime(&tt);
 
                int h = t->tm_hour;
                int m = t->tm_min;
                int s = t->tm_sec;

		printf("%d:%d:%d\n", h,m,s)
		seconde--;
		Sleep(1000);
		system ("cls");
	}
	system ("shutdown -p");
	return 0;
}
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 7/07/2011 à 23:25
Tout dépend ce que tu veux faire...
Comme ça il affichera l'heure toutes les secondes, je suis pas sûr que c'est ce que tu veuilles !
Moi j'aurais mis ça juste après l'accolade fermante du while, la ligne avant l'appel system
Mais c'est difficile de t'aider exactement, on ne sais pas ce que tu veux faire exactement...
À vrai dire il me parait personnellement inutile de faire un tel affichage, mais c'est ton programme ;-)
Met en commentaire la ligne du shutdown et fais des tests !
0
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 1
7 juil. 2011 à 23:27
tu vois, tu insère le nombre d'heure de minute et de seconde, l'ordinateur convertit tout en seconde et l'ordinateur s'eteint a la fin du compte a rebour, le compte a rebours lui s'affiche a l'ecran mais en seconde, il y a pas un moyen de le remmetre en heure, minutes, seconde ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
7 juil. 2011 à 23:54
Tu peux faire comme cela :

#include "stdlib.h"
#include "stdio.h"
#include "windows.h"

int main()
{
    char heure, minute, seconde;

    printf ("Cette application sert a eteindre l'ordinateur au bout d'un certain temps.\n\n");
    
    printf("Nombre d'heures : ");
    scanf("%d",&heure);

    printf ("Nombre de minutes : ");
    scanf("%d",&minute);

    printf ("Nombre de secondes : ");
    scanf("%d",&seconde);

    while (true)
    {
        system ("cls");
        printf("Extinction dans %d:%d:%d\n",heure,minute,seconde);
        
        if (seconde==0)
        {
            if (minute==0)
            {
                if (heure==0)
                {
                    //system ("shutdown -p");
                    return 0;
                }
                else
                {
                    heure--;
                    minute+=59;
                }
            }
            else
            {
                minute--;
            }
            
            seconde+=59;
        }
        else
        {
            seconde--;
        }
        
        //Sleep(1000);
    }
}
Remarque : utiliser Sleep(1000) n'assure en aucun cas qu'il y aura très exactement 1 seconde entre chaque itération, je pense qu'il faut repenser ton code en définissant une heure à atteindre, et égrainer le temps qui nous sépare de cette heure.
0
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 1
7 juil. 2011 à 23:59
1>------ Début de la génération : Projet : shutdown, Configuration : Debug Win32 ------
1> main.c
1>c:\users\baptiste parsy\documents\visual studio 2010\projects\shutdown\shutdown\main.c(12): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(304) : voir la déclaration de 'scanf'
1>c:\users\baptiste parsy\documents\visual studio 2010\projects\shutdown\shutdown\main.c(15): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(304) : voir la déclaration de 'scanf'
1>c:\users\baptiste parsy\documents\visual studio 2010\projects\shutdown\shutdown\main.c(18): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(304) : voir la déclaration de 'scanf'
1>c:\users\baptiste parsy\documents\visual studio 2010\projects\shutdown\shutdown\main.c(20): error C2065: 'true' : identificateur non déclaré
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
0
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 1
8 juil. 2011 à 00:00
ca ne marche pas
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
8 juil. 2011 à 00:10
Ce genre d'erreur tu devrais apprendre à les corriger toi même Visual Studio te le dit assez clairement pourtant : C2065: 'true' : identificateur non déclaré

Moi j'ai compilé mon code en C++ donc il connait true, mais si tu compiles en C ça plante...
Remplace while(true) par while(1) et ça devrait marcher...
0
lucario200298 Messages postés 57 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 16 mai 2015 1
8 juil. 2011 à 00:11
merci
0