Fscanf + while
Résolu
Euph0r1c
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,
J'ai plusieurs fichiers. Le fichier principal contient des noms des listes (des fichiers). Tous les autres fichiers sont nommés par exemple "liste_1.txt" ... "liste_n.txt". Chaque fichier contient plusieurs mots (un mot par ligne). Le but c'est d'afficher d'abord le nom de la 1ère liste et ts les mots qu'elle contient et ensuite la meme chose pour toutes les autres lstes.
Par exemle: supposons que le fichier principal primary_f.txt contient 2 noms de fichiers: "Obama"et "Sarkozy". Le fichier "Obama.txt" contient "Clinton, Levinsky" et "Washington" (un seul mot par ligne). Et "Sarkozy.txt" contient "Bruni" et "HADOPI".... A la fin je veux qu'il m'affiche:
Voici mon code:
Et il marche pas (facile à tester).Quelqu'un peut me le modifier s'il vous plaît?
Merci et bonne journée
J'ai plusieurs fichiers. Le fichier principal contient des noms des listes (des fichiers). Tous les autres fichiers sont nommés par exemple "liste_1.txt" ... "liste_n.txt". Chaque fichier contient plusieurs mots (un mot par ligne). Le but c'est d'afficher d'abord le nom de la 1ère liste et ts les mots qu'elle contient et ensuite la meme chose pour toutes les autres lstes.
Par exemle: supposons que le fichier principal primary_f.txt contient 2 noms de fichiers: "Obama"et "Sarkozy". Le fichier "Obama.txt" contient "Clinton, Levinsky" et "Washington" (un seul mot par ligne). Et "Sarkozy.txt" contient "Bruni" et "HADOPI".... A la fin je veux qu'il m'affiche:
Obama
Clinton
Levinsky
Washington
Sarkozy
Bruni
HADOPI
Voici mon code:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 300
int afficher()
{
FILE* fichier = NULL;
char chaine[MAX_LEN];
char chaine1[MAX_LEN];
fichier = fopen("primary_f.txt", "r" );
while (fscanf(fichier," %[^\n]s",chaine)!= EOF)
{
printf("%s\n",chaine);
fclose(fichier);
sprintf(chaine1,"%s.txt",chaine);
fichier=fopen(chaine1,"r" );
while (fscanf(fichier," %[^\n]s",chaine1)!=EOF)
{
printf(" %s\n\n\n",chaine1);
};
fclose(fichier);
fichier = fopen("primary_f.txt", "r" );
};
fclose(fichier);
return(0);
}
Et il marche pas (facile à tester).Quelqu'un peut me le modifier s'il vous plaît?
Merci et bonne journée
A voir également:
- Fscanf + while
- Eol while scanning string literal ✓ - Forum Python
- Error code 1309 mac while copying ✓ - Forum MacOS
- Application error: a client-side exception has occurred while loading www.leboncoin.fr (see the browser console for more information). ✓ - Forum Réseaux sociaux
- Problème fscanf c++ ✓ - Forum C++
- Factorielle en c boucle while - Forum C
3 réponses
Merci, mais bon c'est pas main car c'est un morceau dont le prototype va vers main...puis oui boucle infini. Mais j'ai déjà corrigé moi-meme
Voici:
Là ça marche parfaitement. Merci de m'avoir repondu.
FILLED
Voici:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 300
int afficher()
{
FILE* fichier;
FILE* fichier1; //pour les noms
char chaine[MAX_LEN];
char chaine1[MAX_LEN];
if (fopen("primary_f.txt","r")==NULL)
{
printf("C'est vide.Ajoutez d'abord une todo-liste \n");
return(0);
};
fichier=fopen("primary_f.txt", "r");
while ((fscanf(fichier," %[^\n]s",chaine))!=EOF)
{
printf("%s\n\n",chaine);
sprintf(chaine1,"%s.txt",chaine);
fichier1=fopen(chaine1,"r");
while ((fscanf(fichier1," %[^\n]s",chaine1))!=EOF)
{
printf("...%s\n\n",chaine1);
};
};
fclose(fichier);
return(0);
}
Là ça marche parfaitement. Merci de m'avoir repondu.
FILLED
Salut,
Attention, tu n'as pas de fonction main(). Elle est obligatoire.
Ensuite, au vu de ton programme, je pense qu'il continue en boucle.
Si c'est ça, c'est très simple. Tu fermes le flux du fichier à chaque boucle while, et tu le rouvres après. Le problème c'est qu'en le rouvrant le flux de lecture sera positionné au début. Et donc tu ne liras jamais la ligne suivante. Tu dois donc avoir deux pointeurs sur des fichiers (un pour le fichier principal et un autre pour les fichiers secondaires).
Cdlt,
Attention, tu n'as pas de fonction main(). Elle est obligatoire.
Ensuite, au vu de ton programme, je pense qu'il continue en boucle.
Si c'est ça, c'est très simple. Tu fermes le flux du fichier à chaque boucle while, et tu le rouvres après. Le problème c'est qu'en le rouvrant le flux de lecture sera positionné au début. Et donc tu ne liras jamais la ligne suivante. Tu dois donc avoir deux pointeurs sur des fichiers (un pour le fichier principal et un autre pour les fichiers secondaires).
Cdlt,