Simplement lire une ligne en C

Fermé
matthieu7666 Messages postés 6 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 17 juin 2009 - 15 juin 2009 à 15:16
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 17 juin 2009 à 21:55
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
15 juin 2009 à 21:40
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 lundi 15 juin 2009 Statut Membre Dernière intervention 17 juin 2009
15 juin 2009 à 21:56
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
15 juin 2009 à 22:12
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 lundi 15 juin 2009 Statut Membre Dernière intervention 17 juin 2009
16 juin 2009 à 18:52
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
16 juin 2009 à 22:40
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 lundi 15 juin 2009 Statut Membre Dernière intervention 17 juin 2009
16 juin 2009 à 23:06
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
17 juin 2009 à 19:48
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 lundi 15 juin 2009 Statut Membre Dernière intervention 17 juin 2009
17 juin 2009 à 20:19
#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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
17 juin 2009 à 21:55
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
> Impossible de trouver avec google

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