IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

mettre à jour une ligne


Sujet :

C

  1. #1
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut mettre à jour une ligne
    bonjour,

    j'utilise le logiciel en console "wget" et je me demande comment il fait pour mettre à jour sont pourcentage dans la console.

    que manque -t- il à ce code pour avoir cette fonctionnalité ?
    ou quelle est l' "astuce" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <stdio.h>
     
    #define MAXI 10
     
    void affiche(int *i)
    {
    	int cpt=0;
     
    	if ((*i)<=MAXI)
    	{
    		fprintf(stdout,"[");
    		for(cpt=0;cpt<(*i);cpt++)
    			fprintf(stdout,"=");
    		for(cpt=*i;cpt<MAXI;cpt++)
    			fprintf(stdout," ");
    		fprintf(stdout,"] %d%\n",*i);
    		*i++;
    	}
    	sleep(1);
    }
     
    int main(void)
    {
    	char c;
    	int i=0;
     
    	while(i<=MAXI)
    	{
    		affiche(&i);
    		i++;
    	}
     
    	return 0;
    }

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut Re:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(stdout,"] %d%\n",*i);
    Remplace \n par \r
    sleep non portable

  3. #3
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    le sleep c'est juste pour voir une évolution (sinon tou s'affiche en même temps). le \r me pose problème : mon programme ne fait plus rien.

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    e \r me pose problème : mon programme ne fait plus rien.
    Non c'est sleep qui pose problème, essaie plutôt avec sleep(100) pour voir.

  5. #5
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    c'est pas le sleep, lui il marche :

    j'aivais quelques soucis d'indice mais le problème initial reste là :

    le \r ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdio.h>
     
    #define MAXI 10
     
    void affiche(int *i)
    {
    	int cpt=0;
     
    	if ((*i)<=MAXI)
    	{
    		fprintf(stdout,"\r[");
    		for(cpt=0;cpt<(*i);cpt++)
    			fprintf(stdout,"=");
    		for(cpt=*i;cpt<MAXI;cpt++)
    			fprintf(stdout," ");
    		fprintf(stdout,"] %d%",*i);
    	}
    }
     
    int main(void)
    {
    	char c;
    	int i=0;
     
    	while(i<=MAXI)
    	{
    		affiche(&i);
    		i++;
    	}
    	printf("\n");
     
    	return 0;
    }

  6. #6
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    ce code marchera mieux, il faudra juste utiliser system()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <stdio.h>
     
    #define MAXI 10
     
    void affiche(int *i)
    {
    system("cls");
    int cpt=0;
     
    if ((*i)<=MAXI)
    {
    fprintf(stdout,"[");
    for(cpt=0;cpt<(*i);cpt++)
    fprintf(stdout,"=");
    for(cpt=*i;cpt<MAXI;cpt++)
    fprintf(stdout," ");
    fprintf(stdout,"] %d%\n",*i);
    *i++;
    }
    sleep(1);
    }
     
    int main(void)
    {
    char c;
    int i=0;
     
    while(i<=MAXI)
    {
    affiche(&i);
    i++;
    }
     
    return 0;
    }
    mais \r est mieux dans cette situation

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Melem Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(stdout,"] %d%\n",*i);
    Remplace \n par \r
    sleep non portable
    sleep() est POSIX.1. Cette fonction est donc relativement (très) portable. Pour étendre la portable à Windows, on s'en tire sans douleur avec quelques instructions pré-processeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #if defined (WIN32)
    #   include <windows.h>
    #   define sleep(s) Sleep(1000 * (s))
    #else 
    #   include <unistd.h>
    #endif
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  8. #8
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    system("clear") est un peu radical, je veux juste mettre à jours ma barre de progression (mes "=") pas tout enlever à chaque fois.

  9. #9
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par Thierry Chappuis
    sleep() est POSIX.1. Cette fonction est donc relativement (très) portable.
    Oui bien sûr, je voulais dire non ISO.

    Que veux-tu dire au fait par mon programme ne fait plus rien? Et pourquoi as-tu utilisé un pointeur en argument de la fonction affiche? Est-ce vraiment nécessaire? D'autant que tu ne testes pas le pointeur ...

  10. #10
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Citation Envoyé par Rniamo Voir le message
    system("clear") est un peu radical, je veux juste mettre à jours ma barre de progression (mes "=") pas tout enlever à chaque fois.
    alors je vois pas ou est le problem, ce que melem t a proposé marche trés bien, sinon si tu veux pas utiliser sleep(), tu peux inclure time.h et travailler avec clock() avec une boucle

  11. #11
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    c'est peut-être bien sleep qui est en cause...je regarde, pour le pointeur c'était due à une ancienne version, voici la nouvelle :

    (où je remets \r mais sans sleep)
    A tester.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <stdio.h>
    #include <stdlib.h>
     
    #define MAXI 10
     
    void affiche(int i)
    {
    	int cpt=0;char c;
     
    	if (i<=MAXI)
    	{
    		printf("\r");
    		printf("[");
    		for(cpt=0;cpt<i;cpt++)
    			printf("=");
    		for(cpt=i;cpt<MAXI;cpt++)
    			printf(" ");
    		printf("] %d%",i);
    	}
    }
     
    int main(void)
    {
    	int i=0;
     
    	while(i<=MAXI)
    	{
    		affiche(i);
    		i++;
    	}
    	printf("\n");
     
    	return 0;
    }
    Merci de vos réponses

  12. #12
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    avec ce code tu peux t en passer de sleep()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    #define MAXI 10
     
    void cust_sleep(int i)         /*mette en pause le programm pour i seconds*/
    {
        clock_t start,end;
        start=clock();
        while(((end=clock())-start)<=i*(CLOCKS_PER_SEC));
    }
    void affiche(int i)
    {
    	int cpt=0;char c;
     
    	if (i<=MAXI)
    	{
    		printf("\r");
    		printf("[");
    		for(cpt=0;cpt<i;cpt++)
    			printf("=");
    		for(cpt=i;cpt<MAXI;cpt++)
    			printf(" ");
    		printf("] %d%",i);
    	}
    	cust_sleep(1);
    }
     
    int main(void)
    {
    	int i=0;
     
    	while(i<=MAXI)
    	{
    		affiche(i);
    		i++;
    	}
    	printf("\n");
     
    	return 0;
    }

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Je dirais \r + fflush(stdout)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    quel est le problème de ce code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    #define MAXI 10
     
    void cust_sleep(int i)         /*mette en pause le programm pour i seconds*/
    {
        clock_t start,end;
        start=clock();
        while(((end=clock())-start)<=i*(CLOCKS_PER_SEC));
    }
     
     
    void affiche(int i)
    {
    	int cpt=0;
     
    	if (i<=MAXI)
    	{
    		printf("\r");
    		fflush(stdout);
    		printf("[");
    		for(cpt=0;cpt<i;cpt++)
    			printf("=");
    		for(cpt=i;cpt<MAXI;cpt++)
    			printf(" ");
    		printf("] %d%",i);
    	}
    	cust_sleep(1);
    }
     
    int main(void)
    {
    	int i=0,a=1;
    	long t=0;
     
    	while(i<=MAXI)
    	{
    		t=time(NULL);
    		affiche(i);
    		sleep(1);
    		i++;
    	}
    	printf("\n");
     
    	return 0;
    }

  15. #15
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Citation Envoyé par Rniamo Voir le message
    quel est le problème de ce code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    #define MAXI 10
     
    void cust_sleep(int i)         /*mette en pause le programm pour i seconds*/
    {
        clock_t start,end;
        start=clock();
        while(((end=clock())-start)<=i*(CLOCKS_PER_SEC));
    }
     
     
    void affiche(int i)
    {
    	int cpt=0;
     
    	if (i<=MAXI)
    	{
    		printf("\r");
    		fflush(stdout);
    		printf("[");
    		for(cpt=0;cpt<i;cpt++)
    			printf("=");
    		for(cpt=i;cpt<MAXI;cpt++)
    			printf(" ");
    		printf("] %d%",i);
    	}
    	cust_sleep(1);
    }
     
    int main(void)
    {
    	int i=0,a=1;
    	long t=0;
     
    	while(i<=MAXI)
    	{
    		t=time(NULL);
    		affiche(i);
    		sleep(1);
    		i++;
    	}
    	printf("\n");
     
    	return 0;
    }

    le problem est la :
    tu as encore utilisé sleep(), t aurai du utiliser cust_sleep().

    le bon code devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    #define MAXI 10
     
    void cust_sleep(int i)         /*mette en pause le programm pour i seconds*/
    {
        clock_t start,end;
        start=clock();
        while(((end=clock())-start)<=i*(CLOCKS_PER_SEC));
    }
     
     
    void affiche(int i)
    {
    	int cpt=0;
     
    	if (i<=MAXI)
    	{
    		printf("\r");
    		fflush(stdout);
    		printf("[");
    		for(cpt=0;cpt<i;cpt++)
    			printf("=");
    		for(cpt=i;cpt<MAXI;cpt++)
    			printf(" ");
    		printf("] %d%",i);
    	}
     
    }
     
    int main(void)
    {
    	int i=0,a=1;
    	long t=0;
     
     
    	while(i<=MAXI)
    	{
    		t=time(NULL);
    		affiche(i);
    		cust_sleep(1);
    		i++;
    	}
    	printf("\n");
     
    	return 0;
    }

  16. #16
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    effectivement et désolé pour ce dernier post inutile .

    Merci !!!

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Rniamo Voir le message
    (où je remets \r mais sans sleep)
    C'est pas propre...


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre à jour une ligne
    Par dehcar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 09/02/2015, 19h31
  2. Mettre à jour une ligne dans un p:datatable
    Par lanokims dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 24/11/2014, 14h33
  3. Mettre à jour les lignes d'une colonne dans dataTable
    Par Mikelester12 dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/07/2007, 08h31
  4. Réponses: 1
    Dernier message: 16/05/2007, 20h31
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo