utiliser les valeurs d'un fichier texte [ résolu ].

utiliser les valeurs d'un fichier texte [ résolu ]. - C - Programmation

Marsh Posté le 03-06-2018 à 16:15:34    

Salut à toutes et tous .  
je suis débutant en programmation et je vous sollicite pour un problème sur lequel je butte depuis plusieurs jours ... désolé , de demander une chose qui est certainement évidente pour vous ..
voilà le topo: en utilisant la fonction "fgets" je récupère dans un  tab1 deux nombres (1 et 3) stockés dans un fichier texte. Je demande l'affichage dans la fonction, tout est bon.  Ensuite je voudrais utiliser ces nombres pour supprimer d'éventuelles occurences avec un tableau tab2 ,  mais je ne parviens pas à utiliser ces valeurs  ni même à les afficher en dehors de "fgets" ..  est-ce que quelqu'un veut bien m'éclairer ?  Merci d'avance.
 
voici le code :

Code :
  1. int main()
  2. {
  3.       /*  ouverture du fichier contenant les entiers  1 et 3 .*/
  4. #define TAILLE_MAX 100
  5.     int tab1[TAILLE_MAX];
  6.     FILE* fichier = NULL;
  7.     fichier = fopen("fichier.txt", "r" );
  8.     if( fichier == NULL)
  9.           printf("\n  ouille y a un bleme avec le fichier \n" );
  10.       { fgets( tab1,TAILLE_MAX,fichier);
  11.         printf("  fichier : %s \n\n ", tab1);    /* les bonnes valeurs sont affichees */
  12.         fclose(fichier);
  13.       }
  14.     printf(" 1er indice : %d \n\n ",tab1[0]);    [][/]/* ici il affiche 3350577 c'est une adresse,non ? */
  15.     int i;
  16.     for( i=0;i<2;i++);
  17.     printf(" affichage tab1: %d \n",tab1[i]); /* ici il affiche 7667712 encore une adresse .. */
  18.    int tab2[]={1,2,3,4,5};
  19.         /*   recherche et suppression occurrence   */
  20.    int n = 5;    int trouve = 0;   int occurrence = -1;
  21.    int x;   x=  tab1[0];
  22.     printf(" \n valeur de x : %d  \n" ,x);     /* ici il affiche encore 3350577, c'est bon !! */
  23.     while((i<n)&&(trouve==0))
  24.         {  if(tab2[i]==x)
  25.               {trouve = 1;
  26.                occurrence = i;
  27.               }
  28.           else
  29.             i++;
  30.         }
  31.          if ( occurrence == -1)
  32.              printf("  la valeur de x n'existe pas. \n" );
  33.          else
  34.           {    for(i = occurrence; i<n-1; i++)
  35.              {  tab2[i]=tab2[i+1];
  36.                 n--;
  37.              }
  38.               printf(" tableau de 4 No : " );
  39.               printf(" %d  \n  " ,tab2[i]);
  40.           }
  41.     return 0;
  42. }


Message édité par e- t le 05-06-2018 à 10:15:17
Reply

Marsh Posté le 03-06-2018 à 16:15:34   

Reply

Marsh Posté le 03-06-2018 à 17:34:22    

Il faut passer un char* à fgets et pas un int*

Reply

Marsh Posté le 03-06-2018 à 18:02:17    

Totoche17 a écrit :

Il faut passer un char* à fgets et pas un int*

+1
Le compilateur te le dirait si tu avais activé les warnings. Obligatoire pour les débutants!
 
Et entre parenthèses, si fichier==NULL ça ne suffit pas d'imprimer un message, tu ne peux pas continuer après, il faut quitter le programme (ou réessayer d'ouvrir le fichier).

Reply

Marsh Posté le 03-06-2018 à 18:59:44    

merci d'avoir répondu si vite.
 j'ai mis un "int" à fgets  car je voulais extraire des chiffres ...mais j'ai faux . bon ..  j'ai vu les warnings ,effectivement avec "char" il n'y en a pas. en revanche pour tab1[0]); il affiche: 49 . pour tab1[1];  il affiche 32.   et pour tab1[i] il affiche 51....  alors que les valeurs dans le fichier sont 1 et 3 ... alors là,...  déjà que je comprenais pas tout ..!

Reply

Marsh Posté le 03-06-2018 à 19:11:49    

Il faut d'abord lire la chaîne de caractéres avec fgets, ensuite séparer les nombres (montre donc le contenu de ton fichier texte) et convertir les lettres en nombres. Ce que tu vois actuellement ce sont des codes ASCII (une chaîne de caractéres est une suite de codes ASCII terminé avec 0). Tu peux aussi regarder du côté fscanf.

Reply

Marsh Posté le 03-06-2018 à 19:40:40    

ok d'accord. Je vais me pencher là-dessus.  Mais vu que mon fichier contiendra uniquement des nombres, il serait peut-être plus simple que j'opte pour un fichier binaire ?  j'avais un peu regardé ça , mais  ça m'avait fait peur !!!!!! on est nul parfois quand on débute !!  Mais bon , quand il faut ,il faut . merci " rat de combat ".

Reply

Marsh Posté le 05-06-2018 à 02:26:09    

Humm revois les bases sur les int et les char (comme dis plus haut, man ASCII). Quand tu récup un char*, et que tu veux récupérer chaque valeurs, soit tu split, sur les espaces, ton fichier dans un char** et tu lances un atoi sur chaque string de ton tableau, soit tu atoi au fur et à mesure en faisant bien attention d'envoyer la bonne position dans ta string à cette fonction.

 

La première proposition est plus simple à mettre en œuvre et plus formateur de mon point de vue.

Reply

Marsh Posté le 05-06-2018 à 09:57:26    

Merci beaucoup de votre aide et de votre indulgence face à mes erreurs grossière . A décharge pour moi ,je suis ..très débutant et j'ai peut-être voulu aller plus vite que la zizique !!  j'ai réglé le problème.

Reply

Sujets relatifs:

Leave a Replay

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