problem pour un crack

problem pour un crack - C - Programmation

Marsh Posté le 08-04-2006 à 13:22:13    

voilà, je dois acquérir un fichier de ce type :  
 
79,74 -2,15 6,76 1,70  
83,46 4,71 3,79 4,33  
91,36 2,73 5,68 5,61  
92,60 1,24 6,33 11,44  
101,58 2,48 3,30 19,94  
102,94 -4,47 6,97 22,74  
107,29 4,27 5,77 31,30  
116,45 4,00 5,51 32,54  
126,33 1,85 3,65 33,27  
135,14 4,21 6,61 39,13  
135,88 0,11 4,53 40,97  
140,04 3,22 3,86 46,87  
143,63 3,22 3,96 51,29  
143,63 -1,60 3,19 55,35  
149,36 -1,82 5,35 61,55  
154,28 3,23 4,29 68,92  
154,86 0,71 3,86 77,24  
157,25 4,01 6,82 81,54  
161,72 3,21 6,77 89,73  
171,27 -3,87 3,92 90,50  
180,74 -1,30 6,06 94,30  
189,06 -1,11 6,79 97,43  
196,57 -0,57 3,34 105,24  
196,68 3,45 6,98 106,13  
199,86 4,16 4,61 106,37  
208,05 -0,07 5,30 107,10  
214,27 3,87 6,72 112,01  
223,34 -3,35 6,57 121,74  
229,04 -3,00 4,61 127,55  
236,42 3,89 4,30 128,47  
240,01 3,62 5,21 131,62  
249,77 0,08 3,47 132,55  
257,30 1,02 4,56 141,02  
262,94 -0,15 3,94 145,55  
272,81 -2,27 5,82 151,94  
 
dans un tableau de dimension 2 .  
JE PROGRAMME EN VISUAL STUDIO NET  
 
voici le pgm que j'utilise :  
#include <fstream>  
#include <malloc.h>  
#include <iostream>  
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>    
                               // strtok() -> decoupage de chaine de caracteres  
                               // atoi -> convertir une chaine de caractere en un entier  
   
                     
                   // Nombre de colonne maximum du tableau  
#define MAX_CHAR_PER_LINE    12                // Nombre de caratere maximum par ligne dans le fichier lu : 3*400+400+1 = 1601 mais j'ai mis 1650 pour arrondir  
#define SEP                    " "                    // Séparateur utilisé dans le fichier  
#define PATH                "C:\\MESURE1.txt"        // Mets l'emplacement de ton fichier contenant les valeurs  
   
   
int main(int argc, char* argv[])  
{  
    FILE*    m_File;  
    int        i = 0;  
    int        j;  
    float    Tab[4000][5];  
    char    szbuff[MAX_CHAR_PER_LINE];  
    char*    token;  
   
       
       
    // On initialise le tableau a -1  
    for(i=0;i<4000;i++)  
    {  
        for(j=0;j<5;j++)  
        {  
            Tab[i][j] = -1;  
        }  
    }  
       
    // On réinitialise le compteur de ligne car i;a été incrémenté lors de l'iniatialisation  
    i = 0;  
       
    // On ouvre le fichier en lecture seule et en mode texte  
    m_File = fopen(PATH,"rt";  
   
    // On vérifie qu'il n'y ai pas eu d'erreur pendant l'ouverture du fichier  
    if(!m_File) return 1;  
   
    // On lit le fichier ligne a ligne et on stocke les valeurs dans un tableau d'entier  
    // La boucle while a l'avantage de permettre la lecture d'un fichier sans connaitre son nombre de ligne exact  
    // et nous évite donc de faire bugger le programme  
    // Le "feof" veut "End Of File". On lit donc jusuqu'à la fin du fichier  
    while(!feof(m_File) && i < 4000)  
    {  
           
        j = 0;  
   
        // On récupere la ligne courante du fichier  
        fgets(szbuff,MAX_CHAR_PER_LINE,m_File);  
           
        // On decoupe la ligne selon le charactere de séparation SEP (" "  
        token = strtok(szbuff,SEP);  
   
        // On lit les éléments découpés un à un et on les stocke dans le tableau Tab  
        while(token != NULL && j < 5)  
        {  
            // On stocke la valeur lue dans le tableau  
            Tab[i][j] = atof(token);  
            // On lit l'element suivant retourner par strtok  
            token = strtok(NULL,SEP);  
            // On incremente le compteur des ordonnées  
            j++;  
        }  
           
        // On incrémente le compteur des abscisses  
        i++;  
    }  
   
   
    // On affiche le tableau pour etre sur que tout s'est bien passé... Le \t correspond au caractere tabulation  
    // Le 0.2f indique qu'on doit afficher un float avec 2 decimales après la virugle  
    for(int x=0;x<i;x++)  
    {  
        for(int y=0;y<j;y++)  
        {  
            printf("%0.2f\t",Tab[x][y]);  
        }  
        printf("\n";  
    }  
   
    return 0;  
   
}  
 
 
mais le pgm defile et le compilateur me met ça à la fin :  
 
'site.exe': Loaded 'C:\Documents and Settings\lefrancois\Mes documents\C++\site\Debug\site.exe', Symbols loaded.  
'site.exe': Loaded 'C:\WINDOWS\SYSTEM32\ntdll.dll', No symbols loaded.  
'site.exe': Loaded 'C:\WINDOWS\SYSTEM32\kernel32.dll', No symbols loaded.  
The program '[204] site.exe: Native' has exited with code 0 (0x0).  
 
 
merci de m'aider, je suis en C/C++

Reply

Marsh Posté le 08-04-2006 à 13:22:13   

Reply

Marsh Posté le 08-04-2006 à 13:28:07    

topic en double !
 
pour les balises code c'est pas dur :
Tu édites ton message et tu mets [ code ] avant et [ / code ] à la fin de ta portion de code (sans les espaces entre les [ ] )


Message édité par _darkalt3_ le 08-04-2006 à 13:37:13
Reply

Marsh Posté le 08-04-2006 à 13:30:30    

keep_school a écrit :


Code :
  1. #include <fstream>




Pas du C. C++, c'est à coté.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 08-04-2006 à 13:38:03    

ah ouais mais en c++ on veut pas de malloc :o

Reply

Marsh Posté le 08-04-2006 à 13:39:52    

tous le monde critiqque mon sujet, mais je suis debutant
mais j'ai pas une seule réponse qui me dit pk ça marche pas

Reply

Marsh Posté le 08-04-2006 à 13:40:06    

while(fgets( ... ) != NULL) d'abord

Reply

Marsh Posté le 08-04-2006 à 13:56:02    

keep_school a écrit :

tous le monde critiqque mon sujet, mais je suis debutant
mais j'ai pas une seule réponse qui me dit pk ça marche pas


Commence par choisir si tu fais du C ou du C++, ce sera plus clair...
 
Supposons en C. De nombreux problèmes :  

  • #include <fstream>

    #include <malloc.h>
    #include <iostream>

    n'existent pas en C.

    • Dans main(),

      int argc, char* argv[]

      ne sont pas utilisés.

    • MAX_CHAR_PER_LINE est beaucoup trop petit. Une ligne fait une trentaine de caractères...
    • fopen() : manque une ')'. "rt" n'existe pas. C'est "r".
    • dernier printf() : manque une ')'
    • Pourquoi 5 colonnes alors que le fichier d'en a que 4 ?
    • etc.
    Code :
    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <stdlib.h>
    4. // Mets l'emplacement de ton fichier contenant les valeurs
    5. #define PATH "mesures1.txt"
    6. static void replace (char *s, int old, int new)
    7. {
    8.    char *p = s;
    9.    while (*p)
    10.    {
    11.       if (*p == old)
    12.       {
    13.          *p = new;
    14.       }
    15.       p++;
    16.    }
    17. }
    18. int main(void)
    19. {
    20.    // On ouvre le fichier en lecture seule et en mode texte
    21.    FILE* m_File = fopen(PATH, "r" );
    22.    // On vérifie qu'il n'y ai pas eu d'erreur pendant l'ouverture du fichier
    23.    if (m_File != NULL)
    24.    {
    25.       char szbuff[80];
    26.       int lines = 0;
    27.       // On lit le fichier ligne a ligne et on stocke les valeurs dans un tableau d'entier
    28.       // La boucle while a l'avantage de permettre la lecture d'un fichier sans connaitre son nombre de ligne exact
    29.       // et nous évite donc de faire bugger le programme
    30.       static float Tab[100][4];
    31.       // On initialise le tableau a -1
    32.       {
    33.          size_t i;
    34.          for (i = 0;i < sizeof Tab / sizeof *Tab;i++)
    35.          {
    36.             size_t j;
    37.             for (j = 0;j < sizeof *Tab / sizeof **Tab;j++)
    38.             {
    39.                Tab[i][j] = 0;
    40.             }
    41.          }
    42.       }
    43.       // On récupere la ligne courante du fichier
    44.       while (fgets(szbuff, sizeof szbuff, m_File) != NULL && lines < sizeof Tab / sizeof *Tab)
    45.       {
    46.          replace (szbuff, ',', '.');
    47.          int n = sscanf(szbuff
    48.                         , "%f %f %f %f"
    49.                         , Tab[lines] + 0
    50.                         , Tab[lines] + 1
    51.                         , Tab[lines] + 2
    52.                         , Tab[lines] + 3
    53.                        );
    54.          if (n != 4)
    55.          {
    56.             printf ("'%s': Format error at line %d\n", szbuff, lines + 1);
    57.             break;
    58.          }
    59.          // On incrémente le compteur des abscisses
    60.          lines++;
    61.       }
    62.       /* On affiche le tableau pour etre sur que tout s'est bien passé...
    63.        * Le \t correspond au caractere tabulation
    64.        * Le 0.2f indique qu'on doit afficher un float avec 2 decimales après la virugle
    65.        */
    66.       {
    67.          int x;
    68.          for ( x = 0;x < lines;x++)
    69.          {
    70.             int y;
    71.             for ( y = 0;y < sizeof *Tab / sizeof **Tab;y++)
    72.             {
    73.                printf("%6.2f\t", Tab[x][y]);
    74.             }
    75.             printf("\n" );
    76.          }
    77.       }
    78.    }
    79.    else
    80.    {
    81.       perror (PATH);
    82.    }
    83.    return 0;
    84. }


    Message édité par Emmanuel Delahaye le 08-04-2006 à 15:15:23

    ---------------
    Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 08-04-2006 à 15:34:58    

Taz a écrit :

while(fgets( ... ) != NULL) d'abord


je lui ai déjà dit dans le précédent topic, de même pour la taille des lignes, de "rt", il n'en a pas tenu compte ...
Le source du programme a-t-il l'extension c ou cpp ?
Ton problème vient sans doute qu'il voit des virgules au lieu des points décimaux.


Message édité par Trap D le 08-04-2006 à 15:43:05
Reply

Marsh Posté le 08-04-2006 à 16:01:40    

je le compile avec visual studio net, mais je le fait principalement en C
pk ? le compilateur ne comprend pas le mix des deux ?

Reply

Marsh Posté le 08-04-2006 à 16:03:57    

Le problème est que tu dois choisir ton langage, tu fais du mauvais C et du mauvais C++, donc je choisis le C car tout ton prog est fait en C.
 
PS je t'ai donné le noeud du problème, essaye de tenir compte de ce qu'on t'a dit.

Reply

Marsh Posté le 08-04-2006 à 16:03:57   

Reply

Marsh Posté le 08-04-2006 à 16:11:05    

keep_school a écrit :

je le compile avec visual studio net, mais je le fait principalement en C
pk ? le compilateur ne comprend pas le mix des deux ?


Il n'existe pas de 'mix des 2'. Le code il va êre compilé soit en C soit en C++, pas dans un 'mix des deux'.
 
Franchement, tu t'imagines quoi ? Une IA qui va faire le tri instruction par instruction ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-04-2006 à 12:53:15    

keep_school a écrit :

#define PATH                "C:\\MESURE1.txt"        // Mets l'emplacement de ton fichier contenant les valeurs  


 
C'est pas bien de travailler directement sous "C:\". C'est un coup à polluer sa machine de fichiers de travail qui vont se mélanger avec les fichiers du système. Ensuite, pour nettoyer...
 
Pourquoi ne pas bosser dans ton propre répertoire "C:\Documents and Settings\keep_school\Mes documents" ou alors au pire dans "C:\temp" qui est fait pour ça ?
 
Bon, ça n'a rien à voir avec le schmiliblik mais il fallait que ce soit dit...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed