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 :

comment passer de "1" à "001" ds un fich


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut comment passer de "1" à "001" ds un fich
    Dans mon projet, j'ai à un moment, un calcul qui peut donner un nombre de 3 chiffres (de 0 à 999) mais je voudrais rajouter les dizaines et les centaines lorque celles ci valent 0.
    c'est à dire que je me balade de 000 à 999, donc je veux que 14 -> 014
    et 5 -> 005.

    Pour ça je me sert de strcpy et strcat, mais il y a un probleme:

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    int main ()
    {
    	int NW;
    	int i;
    	FILE *pt, *pti;
    	char *nom8 = "gflog8.h";
    	char *nomi8 = "gfilog8.h";
    	char *nom256 = "gflog256.h";
    	char *nomi256 = "gfilog256.h";
    	char *nom65536 = "gflog65536.h";
    	char *nomi65536 = "gfilog65536.h";
     
    	//compute gflog8 and gfilog8
    	pt = fopen(nom8,"wt"); 
        fputs ("unsigned short gflog8[16]={",pt);
    	pti = fopen(nomi8, "wt");
    	fputs ("unsigned short gfilog8[16]={",pti);
     
     
    	NW = 16;
    	i = compute_log(NW);
     
    	//gflog[0] doesn't exist
    	fprintf(pt, "-1, ", *(gflog++));
    	fprintf(pti, "%u, ", *(gfilog++));
     
    	for(i=1;i<NW-1;i++)
    	{
    		fprintf(pt, "%u, ", *(gflog++));
    		fprintf(pti, "%u, ", *(gfilog++));
     
    	}
    	fprintf(pt, "%u};", *(gflog));
    	//gfilog[15] doesn't exist
    	fprintf(pti, "-1};", *(gfilog));
     
    	fclose(pt);
    	fclose(pti);
     
    return 1;
    }
    //_______________________________________________________________________________________________________________
    //_______________________________________________________________________________________________________________
    //_______________________________________________________________________________________________________________
    //_______________________________________________________________________________________________________________
     
    // compute_log compute log and antilog chart, 
    //they define + and - in Galois field
    int compute_log(int NW)
    {
    	unsigned int b, log, x_to_w, prim_poly;
    	int w, i;
     
    	w = (int) (log10 ( (double) NW) / log10(2));
     
    	switch(w) {
    	case 4:		prim_poly = prim_poly_4;	break;
    	case 8:		prim_poly = prim_poly_8;	break;
    	case 16:	prim_poly = prim_poly_16;	break;
    	default:	return -1;
    	}
     
    	x_to_w = 1 << w;
    	gflog = (unsigned short *) malloc (sizeof(unsigned short) * x_to_w);
    	if(gflog == NULL) 
    	{
    	    fprintf(stderr,"Allocation gflog impossible \n");
    	     exit(EXIT_FAILURE);
    	}
    	gfilog = (unsigned short *) malloc (sizeof(unsigned short) * x_to_w);
    	if(gfilog == NULL)
    	{
    	    fprintf(stderr,"Allocation gfilog impossible \n");
    	     exit(EXIT_FAILURE);
    	}
    	b = 1;
     
     
    	gflog[0] = -NW;
    	gfilog[0] = 1;
    	for(i=1;i<NW;i++)
    	{
    		gfilog[i] = gfilog[i-1]*2;
    		if(gfilog[i]>=256) gfilog[i] = gfilog[i] ^ 301;
    		gflog[gfilog[i]]=i;
    		if(gflog[i]<10)
    		{
    			//gflog[i] = "00" + gflog[i];
    			unsigned short *str;
    			str = NULL;
    			strcpy((char*)str, "00");
    			strcat((char *)str, (char *)gflog[i]);
    			//gflog[i] = "000" ^ gflog[i];
    		}
    	}
     
    	return 0;
     
    }
    voici le header:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <malloc.h>
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    #include<string.h>
     
     
    unsigned int prim_poly_4 = 023;
    unsigned int prim_poly_8 = 0435;
    unsigned int prim_poly_16 = 0210013;
    unsigned short *gflog, *gfilog;
     
    int compute_log(int);
    je crois que je m'embrouille dans le transtypage???

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    c bon j'ai trouvé une solution peu elegante mais fonctionelle:
    je remplace le for par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	for(i=1;i<NW-1;i++)
    	{
    		if(*gflog<100) fprintf(pt, "0");
    		if (*gflog<10) fprintf(pt, "0"); 
    		fprintf(pt, "%u, ", *(gflog++));
    		if (*gfilog<100) fprintf(pti, "0"); 
    		if (*gfilog<10) fprintf(pti, "0"); 
    		fprintf(pti, "%u, ", *(gfilog++));
    	}

  3. #3
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut Re: comment passer de "1" à "001" ds un
    Citation Envoyé par gronaze
    Dans mon projet, j'ai à un moment, un calcul qui peut donner un nombre de 3 chiffres (de 0 à 999) mais je voudrais rajouter les dizaines et les centaines lorque celles ci valent 0.
    c'est à dire que je me balade de 000 à 999, donc je veux que 14 -> 014
    et 5 -> 005.

    Pour ça je me sert de strcpy et strcat, mais il y a un probleme:
    En effet, on dirait qu'il y en a un...

    Voici ce que me rend le compilateur (pas grand chose à voir avec ton problème mais bon...)
    test5.c:26: warning: too many arguments for format
    test5.c:37: warning: too many arguments for format
    Par contre, ce qui a un rapport avec le problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned short *str;
    str = NULL;
    Est-ce que tu crois que str est alloué correctement? Tu demandes de copier quelque chose dans str, mais il faut qu'il y ait une zone mémoire allouée pour copier dedans, non?

    Un petit malloc ou une allocation statique serait bien.. Ensuite, si t'utilises des entiers, pourquoi ne pas utiliser sprintf avec l'option %3u par exemple?

    Ou directement fprintf avec l'option %3u?

    Jc

  4. #4
    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 Re: comment passer de "1" à "001" ds un
    Citation Envoyé par fearyourself
    Ou directement fprintf avec l'option %3u?
    "%03u"

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut Re: comment passer de "1" à "001" ds un
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par fearyourself
    Ou directement fprintf avec l'option %3u?
    "%03u"
    Mea culpa

    Jc

  6. #6
    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 Re: comment passer de "1" à "001" ds un
    Citation Envoyé par gronaze
    Dans mon projet, j'ai à un moment, un calcul qui peut donner un nombre de 3 chiffres (de 0 à 999) mais je voudrais rajouter les dizaines et les centaines lorque celles ci valent 0.
    c'est à dire que je me balade de 000 à 999, donc je veux que 14 -> 014
    et 5 -> 005.
    Je rappelle que le f de printf() signifie (formatted). Cette fonction permet d'utiiliser une multitude de formats programmables. Evidemment, il faut prendre le temps d'ouvrir un livre de C et de lire les mots qui sont écrits dedans, au lieu d'attendre, comme d'habitude, que tout te tombe tout cuit dans le bec...

    http://www.linux-france.org/article/man-fr/man3/printf-3.html

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/05/2008, 22h26

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