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 :

programme en c


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut programme en c
    bonsoire tous le monde je suis débutant au structure des fichiers j'ai un fichier .txt je veux le lire son contenu(les données ) puis le mettre dans un tableau et l'affiche ,mon probleme est dans l'affichage ,il affiche des autres données!!!!!!!
    voila le programme
    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
    #include<stdio.h> 
    #include<string.h> 
    #include<stdlib.h> 
     
    int i; 
    float X[10]; 
    float c; 
    FILE * XI; 
    void CHARGER_BASE_DES_X() 
    { 
     
    XI=fopen("XI.txt","r"); 
    fscanf(XI,"%f",&X[i]); 
     
    while ((c = fgetc(XI)) != EOF) 
    { 
    for(i=1;i<=10;i++) 
     
    { 
    X[i]=c; 
     
    } 
     
     
     
    } 
    fclose(XI); 
    } 
    void main() 
    { 
    CHARGER_BASE_DES_X(); 
    for(i=1;i<=10;i++) 
    { 
    printf("%f\n",X[i]); 
    } 
    }
    pouvez vous m'aide?merci d'avance.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    il affiche des autres données!!!!!!!
    Peux tu nous monter ce qu'il affiche ?

    à ce moment du code, i n'est pas initialisé, le code a donc un comportement indéfini.

    Tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ((c = fgetc(XI)) != EOF) 
    { 
        for(i=1;i<=10;i++) 
        { 
            X[i]=c; 
        } 
    }
    • Tu lis un caractère depuis le fichier;
    • Tu copie ce caractère dans tous les éléments de ton tableau de flottants...


    Ce qu'il faudrait faire c'est :
    • Lire un flottant depuis le fichier
    • Copier le flottant dans la case suivante du tableau :


    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
    /* flottant temporaire dans lequel on va stocker ce qu'on a 
        lu depuis le fichier */
    float tmp;
    /* case du tableau ou écrire */
    int i = 0;
    while(1 == fscanf(fichier, "%f", &tmp)) {
        /* copie du flottant dans le tableau */    
        X[i] = tmp;
        /* case suivante */
        ++i;
        /* vérification si la fin de tableau est atteinte */
        if(i >= TAILLE_TABLEAU) {
            /* sortie de boucle while */
            break;
        }
    }

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    merci beaucoup pour la correction et les remarques

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Et j'ai oublié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        for(i=1;i<=10;i++) 
        { 
            printf("%f", X[i]); 
        }
    Tu dépasses la capacité du tableau X : en C, les indices de tableaux commencent à 0, il aurait fallut écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        for(i = 0; i < 10 ; i++) 
        { 
            printf("%f", X[i]); 
        }

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    merci
    je veux mettre le fichier txt dans une matrice
    mais j'ai des errures voila le 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
    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
     
    #include<stdio.h> 
     
    #include<string.h> 
     
    #include<stdlib.h> 
     
     
     
    int  X[10][7],d[10];             
     
    float W[7];
     
    /*********************************/
     
    void chargerBaseDesX() 
     
    {
     
    	FILE* XI = fopen("XI.txt","r");
     
     
     
    	int i,j; 
     
     
     
    	for(i=0; i<10; i++)
     
     
     
    	for(j=0; j<7; j++)
     
    	{
     
    		if (EOF == fscanf(XI,"%d%d",X+i,X+j)) 
     
    			break;
     
    	}
     
     
     
    	fclose(XI); 
     
    } 
     
     
     
     
     
    int main() 
     
    {
     
    	int j,i; 
     
    	chargerBaseDesX();	 
     
    for(i=0; i<10; i++)
     
    for(j=0; j<7; j++)
     
    {
     
     
     
    	printf("%d%d\n",X[i][j]);
     
     
     
     
     
     
     
    }
     
     }

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Voilà ce que me donne gcc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    warning: format '%d' expects type 'int *', but argument 3 has type 'int (*)[7]'
    warning: format '%d' expects type 'int *', but argument 4 has type 'int (*)[7]'
    Que veux tu faire quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(XI,"%d%d",X+i,X+j)
    Ne voulais tu pas écrire plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(XI,"%d",&X[i][j])
    ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning: too few arguments for format
    Le format dans printf est %d%d : tu veux donc écrire deux entiers, or tu n'en fournis qu'un seul.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning: control reaches end of non-void function
    Il manque un à la fin du main.

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    vous êtes très gentil merci

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    mais je veux mettre le fichier txt dans une matrice m[10][7]
    c-a-d
    m[0][0]=1
    m[0][1]=1
    .
    .
    .
    .
    m[1][0]=0
    .
    .
    .
    m[9][0]=1
    comment je peux faire ça

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Bonjour,

    Citation Envoyé par hanou88 Voir le message
    mais je veux mettre le fichier txt dans une matrice
    Je suppose que tu veux mettre le contenu du fichier texte dans un tableau d'int à 2 dimensions ?

    Si c'est le cas, tu peux faire comme ca:

    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    int     main()
    {
      FILE* f;      /* flux */
      char* buf;    /* buffer */
      int** tab;    /* tableau d'int a 2 dimensions */
      int   i;      /* compteur des lignes (0-9) */
      int   j;      /* compteur des colonnes (0-6) */
     
      /* allocation du buffer */
      if (NULL == (buf = malloc(sizeof(*buf) * 24)))
        return (EXIT_FAILURE);
     
      /* ouvre le flux */
      if (NULL == (f = fopen("test.txt", "r")))
        return (EXIT_FAILURE);
     
      /* Alloue la premiere dimension du tableau (10) */
      if (NULL == (tab = malloc(sizeof(*tab) * 10)))
        return (EXIT_FAILURE);
     
      for (i = 0; i < 10; ++i)
       {
         /* fgets recupere la premiere ligne du flux -> man fgets */
          if (NULL == (buf = fgets(buf, 24, f)))
            return (EXIT_FAILURE);
     
          /* Alloue la deuxieme dimension du tableau (7) */
          if (NULL == (tab[i] = malloc(sizeof(**tab) * 7)))
            return (EXIT_FAILURE);
          for (j = 0; j < 7; ++j)
            tab[i][j] = buf[j] - '0';
        }
      return (EXIT_SUCCESS);
    }
    Cela t'aide-t-il ?

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    oui merci beucoup pour votre aide .

  11. #11
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    maintenant je veux écrire dans mon fichier texte
    voila la procedure
    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> 
     
    #include<string.h> 
     
    #include<stdlib.h> 
    float W[7];
    void sauvBaseDesW()
     
    {
     
     FILE* WI = fopen("WI.txt","w");
     
     int i; 
     
     for(i=0; i<7; i++) 
     
     {
     
     fprintf(WI,"%f",W+i);
     
      break;
     
     }
     
     fclose(WI); 
     
    } 
    int main() 
     
    {
    sauvBaseDesW();
     
     
     
     }
    il y a un erreur !!!!!

  12. #12
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Ton tableau W n'est pas initialisé.


    Tu écris l'adresse du flottant, pas le flottant lui même.
    Il faut écrire 'W[i]' ou '*(W+i)' au lieu de 'W+i'



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0; i<7; i++) 
    {
        break;
    }
    Que vient faire le 'break' ici, il te fera sortir de la boucle for.

  13. #13
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    merci beaucoup Mr Mabu pour votre aide, vous êtes très très gentil,merci encore

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

Discussions similaires

  1. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  2. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  3. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  4. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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