Lire/Écrire un fichier texte dans la programmation en C
J'ai besoin d'écrire quelque chose dans un fichier txt et en lire le contenu, puis de les imprimer sur l'écran.
Ci-dessous le code que j'ai écrit, il peut créer et écrire du contenu dans le fichier correctement, mais il ne peut pas lire le fichier et l'imprimer correctement.
#include<stdio.h>
#include<stdlib.h>
main()
{
char filename[20]={"c:\\test.txt"};
FILE *inFile;
char c;
inFile=fopen(filename,"w+");
if(inFile==NULL)
{
printf("An error occoured!");
exit(1);
}
while((c=getchar())!=EOF)
fputc(c,inFile);
fputc('#include<stdio.h>
#include<stdlib.h>
main()
{
char filename[20]={"c:\\test.txt"};
FILE *inFile;
char c;
inFile=fopen(filename,"w+");
if(inFile==NULL)
{
printf("An error occoured!");
exit(1);
}
while((c=getchar())!=EOF)
fputc(c,inFile);
fputc('\0',inFile);
while((c=fgetc(inFile))!=EOF)
putchar(c);
}
',inFile);
while((c=fgetc(inFile))!=EOF)
putchar(c);
}
Ce que quelqu'un serait me dire quel est le problème avec ce programme, en particulier les deux dernières lignes.
Merci à l'avance.
Êtes-vous à l'apprentissage de K&R C en 2011? Il n'y a pas plus implicite
Pour référence, l'API Windows peut traiter avec des barres obliques ainsi que des barres obliques inverses comme des séparateurs de répertoire. Je préfère généralement des barres obliques, surtout parce que je n'ai pas à vous soucier d'y échapper.
int
type. Le main
fonction des besoins d'un type de retour. Et il doit retourner quelque chose.Pour référence, l'API Windows peut traiter avec des barres obliques ainsi que des barres obliques inverses comme des séparateurs de répertoire. Je préfère généralement des barres obliques, surtout parce que je n'ai pas à vous soucier d'y échapper.
OriginalL'auteur geyan | 2011-12-18
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter
avant
parce que le pointeur de fichier (pas celui utilisé pour l'allocation de mémoire) a été déplacée à la fin. Pour lire le fichier, vous devez l'amener à l'avant avec le
fseek
fonction.désolé, mais vous je ne suis pas vous. Vous pouvez certainement utiliser fseek (même à aller au-delà de fichier, mais ne pas le faire)
Pourquoi voudriez-vous faire cela?
fseek
est le idiomatiques façon de faire cela, et il fonctionne très bien. Il n'y a aucune raison pour qu'un deuxième variable; que juste de rendre le code plus la confusion--lequel dois-je utiliser?Ce ne les deux derniers paramètres dans la fonction fseek ()?
OriginalL'auteur Vinayak Garg
Vous avez besoin de chercher de revenir au début du fichier après vous écrire, et avant de commencer la lecture:
OriginalL'auteur Adam Zalcman
est votre premier problème.
getc
etgetchar
retourint
s, pas unchar
s. Lire la page de manuel attentivement et de changement que local:Vous n'êtes pas la réinitialisation de la
inFile
cours d'eau après la écrit. Mettez quelque chose comme:avant de commencer la lecture à partir de ce flux. (Voir la page de man.)
Enfin, votre signature n'est pas standard. Utilisation:
Au lieu de fseek inFile, 0L, SEEK_SET vous pouvez aussi dire rewind( inFile ); ce qui (pour moi en tout cas) est plus facile à retenir et plus clair pour le lecteur. Ce code obéit à la règle selon laquelle, d'après l'écriture, et avant de lire, vous devez en quelque sorte repositionner le fichier du pointeur de lecture.
OriginalL'auteur Mat