Probleme de lecture d' un fichier en C

Fermé
sdfsam Messages postés 60 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 mai 2011 - 31 oct. 2010 à 11:59
sdfsam Messages postés 60 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 mai 2011 - 4 nov. 2010 à 16:00
Bonjour,
mon programme en c n'arrive pas à afficher mon fichier , je veux le faire de telle sorte qu'il me demande d'abord d'entrer le nom de fichier puis le lire mais ça marche pas?????????

quand je fais la lecture sans la partie en gras ça passe.

svp est ce que il y a quelqu'un pour m'aider??
merci d'avance mes amis de savoir

PROGRAMME

#include <stdlib.h>
#include <stdio.h>

FILE* f ;

char nom[20];

int main()

{
int ca;
printf("entrer le nom de file:\n");
scanf("s",&nom);

f=fopen("&nom", "r");
caractere= fgetc(f);






if(f==NULL)
if ((f=fopen("lire.txt", "r"))== NULL)
{
printf("\t\t\n\n\nLe fichier n'existe pas!\n \t\t \n");
getchar();
exit(0);
}
{
caractere= fgetc(f); // On initialise le caractère ou on se trouve

// Boucle de lecture des caractères un à un
while (caractere!=EOF) // On continue jusqu'à la fin de fichier
{
printf("%s", caractere); // On affiche le caractère stocké dans caractere ou on se trouve

caractere= fgetc(f); // On lit le caractère suivant
}

fclose(f);
}int get_nb_lines(FILE*f);
getchar();
return 0;
}














A voir également:

5 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
31 oct. 2010 à 12:15
Bonjour,

scanf("s",&nom);
Le compilateur doit gronder en voyant ça. Il faut mettre plutôt :
scanf("%s",nom); ou mieux : scanf("%19s", nom);

f=fopen("&nom", "r");
A moins que le fichier s'appelle vraiment "&nom", ça ne marchera pas.
Ce que tu souhaites faire est : f=fopen(nom,"r");

printf("%s", caractere);
Je n'ai pas vu ta déclaration de ta variable caractere. Mais ce n'est pas cohérent la façon dont tu t'en sers. Tu lis un caractère avec fgetc que tu stockes dans ladite variable. Et après tu affiches avec printf une chaîne de caractère... Il faudrait mettre plutôt : printf("%c",caractere); ou plus simplement : putchar(caractere);

int get_nb_lines(FILE*f);
Tu souhaites faire quoi avec ça ??? Une fonction ?
Si c'est le cas, il ne faut pas le mettre dans la fonction main.

Attention à l'usage un peu hasardeux de tes accolades.

Et enfin, il vaut mieux éviter les variables globales comme tu as fait avec FILE *f et char nom[nom];

Si la correction de toutes ces erreurs ne marchent pas, repose ton code avec les corrections apportées et n'oublie surtout pas d'utiliser les balises code (à droite du bouton souligné).

Cdlt,
0
sdfsam Messages postés 60 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 mai 2011
31 oct. 2010 à 15:34
merci pour vos explication
et cmt je peux faire un traitement bien defini de mes données dans le fichier selon une fonction
ou et comment je vais inserer cette fonction dans mon code
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
31 oct. 2010 à 19:02
Il n'y a pas de points particuliers.
C'est comme pour une fonction classique.
Tu as le choix entre ouvrir le fichier dans ta fonction : à utiliser si tu te resserviras pas du fichier en dehors de ta fonction.
Ou tu ouvres le fichier dans le main, et tu l'envoies en argument de fonction.

Cdlt,
0
sdfsam Messages postés 60 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 mai 2011
2 nov. 2010 à 10:03
c'est pas claire
je veux traiter mes donner de telle sorte de sortir les informations necessaire.

mes données sont : soit des porte logique ou leur entrées

exp: g*1 g+2 e+1 signifie que la porte g*1 est AND numéro1 et g+2 porte OR numéro 2 et e+1 evenemt normal c'est des appleation.

je dois faire un traitement

j'ai fais un code mais marche pas
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
3 nov. 2010 à 20:09
Au lieu de reposter sur un autre sujet, tu ferais mieux de continuer ici.

Sinon pour traiter le fichier, cela dépend comment sont codées les informations.
Si c'est toujours : 1 caractère, 1 opérateur, un caractère, ...
Alors, il te suffit de faire des fgetc pour lire le fichier et récupèrer les données caractère par caractère. Après, un switch pour déterminer l'opérateur fera l'affaire.

Cdlt,
0
sdfsam Messages postés 60 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 mai 2011
3 nov. 2010 à 22:22
merci de m'avoir repondu,
desolé vous m'avez pas compris les informations dans le fichier sont codées de la maniere suivant:

<Portelogique> <espace> <Entrées de cette porte logique>

or on peut faire desappellation comme on veux moi j'ai opté à les appellations

dessus

EXPLICATION: les portes

g--> pour gate
*--> porte and
+--> porte OR
1,2--> indexe de la porte

donc
g*1--> signifie PORTE AND numéro1


LES EVENEMETS:
e: evenement
n: normal
c: complementair
1,2 indexe
en1-->événement normal numéro1
ec1-->événement normal numéro1

j'espère que vous m'avez compris avec cette explication.

merci de m'aider
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
3 nov. 2010 à 23:26
Si vous optez pour votre exemple, fgetc fonctionnera très bien.
Si vous souhaitez pour n'importe quel mot, vous pouvais utiliser fscanf sur le format %s.
Je vois pas ce qui vous bloque.
Cdlt,
0

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

Posez votre question
sdfsam Messages postés 60 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 mai 2011
4 nov. 2010 à 16:00
mon problème est comment je commence ma déclaration et traiter ces données la .
aider à construire le code
0