Simplement lire une ligne en C

matthieu7666 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, je voudrais juste vous demander votre aide pour juste lire une seule ligne (exemple la 23) et l'afficher en language C.
Impossible de trouver avec google souvent c'est juste lire tout le programme ou alors ya 50 000lignes lol

Voilà j'espère avoir tout dit vu que c'est court lol, merci à tous
A voir également:

10 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Pour lire une ligne bien précise, à toi de te faire la fonction.
Pour lire la 23è ligne, tu utilises une boucle pour compter le nombre de '\n' avec strchr et fgets() jusqu'à en compter 22. Tu seras alors au début de la 23è ligne.

Un exemple :
FILE *fp=fopen("chemin_fichier","r");
if(fp==NULL) {
   fputs("erreur à l'ouverture du fichier\n",stderr)
   exit(EXIT_FAILURE);
} else {
   int cmpt=0;
   char buffer[255];
   while(cmpt<12 && fgets(fp,buffer,sizeof buffer)!=NULL)
      if(strchr(buffer,'\n')!=NULL) cmpt++;
   //au début de la 13è ligne
   ...

   fclose(fp),fp=NULL;
}
  
0
matthieu7666 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Vraiment merci je ne trouvais pas sérieusement parcontre j'aimerai un peu comprendre ces choses là que j'ai mis en gras


char buffer[255];
while(cmpt<12 && fgets(fp,buffer,sizeof buffer)!=NULL)
if(strchr(buffer,'\n')!=NULL) cmpt++;

Voilà si ca ne te dérange pas, j'ai fais du C en cour mais ya des trucs que l'on a jamais vu, j'ai quand même chercher pas mal de truc tout seul sur le site.

Merci
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ya pas de soucis, on est là pour expliquer ;-)
char buffer[255];
création d'un tableau de 255 char

while(cmpt<12 && fgets(fp,buffer,sizeof buffer)!=NULL)
fgets permet de lire le flux passé en premier paramètre ici le pointeur de fichier. Il lira 255 (sizeof buffer) caractères au maximum et le mettra à partir de l'adresse buffer (première adresse du tableau). Il faut toujours limiter en taille l'écriture dans un buffer sous risque de jolis segfaults. Le fgets renverra NULL lorsqu'il n'aura plus rien à lire.

if(strchr(buffer,'\n')!=NULL) cmpt++;
si le tableau buffer contient '\n' (saut de ligne) alors on est assuré d'avoir lu une ligne et dans ce cas là le compteur cmpt est incrémenté. Strchr renvoie un pointeur sur la première occurrence du caractère '\n' dans le buffer.


J'espère ne pas avoir été trop flou. Si t'as d'autres questions, n'hésite pas.
0
matthieu7666 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai tester je n'y arriver pas j'ai bien mon fichier txt dans le C:\ et il rencontre un probleme.
Il n'y a pas de warning ni d'erreurs.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
et il rencontre un probleme.
Lequel ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
matthieu7666 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
désolé mal exprimé: "le programme a recontrer un probleme et doit fermé" et cest tout il se ferme, alors que je n'ai ni de warnings ni d'erreurs :S
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Fais moi un copier coller de ton code. N'oublie pas de te servir de la balise "code" située à droite de "souligné".
0
matthieu7666 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int cmpt=0;
    char buffer[255];

    system("cls");

    FILE *fp=fopen("C:\questions.txt","r");
        if(fp==NULL)
            {
            fputs("erreur a l'ouverture du fichier\n",stderr);
            exit(EXIT_FAILURE);
            }
            else
                {

                while(cmpt<3 && fgets(fp,buffer,sizeof buffer)!=NULL)
                    {
                    if(strchr(buffer,'\n')!=NULL)
                    cmpt++;
                    }
                }


    fclose(fp),fp=NULL;
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
void main()
Le bon prototype est : int main(void); (main renvoie un int).
Il faut aussi mettre return 0; avant l'accolade finale.

Et enfin l'erreur vient probablement de : FILE *fp=fopen("C:\questions.txt","r");
Si tu ne doubles pas l'antislash, le compilateur utilisera \q comme séquence d'échappement.
Correction : FILE *fp=fopen("C:\\questions.txt","r");

Cdlt
0
Severin
 
> Impossible de trouver avec google

C'est une blague ?????
0.35 secondes pour trouver !!!!!!!!!!!
Grave...
-1
matthieu7666 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Ca m'étonnerait que tu trouve pr une lire une seule ligne, t'a tapé quoi ?
-1