2011-11-16 1 views
1

Je voulais lire l'entrée de l'utilisateur (plusieurs lignes) et l'écrire dans un fichier en utilisant fputs().Comment lire plusieurs lignes d'entrée de l'utilisateur en utilisant fgets et l'écrire dans un fichier en utilisant fputs en C?

Voici mon code

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
FILE *fp; 
char s[25]; 
fp=fopen("myname","w"); 
if(fp==NULL) 
{ 
    perror("Error opening file\n"); 
    exit(1); 
} 

while(fgets(s,25,stdin)!=NULL) 
    fputs(s,fp); 
fclose(fp); 
return 0; 
} 

Après avoir obtenu l'entrée de l'utilisateur, je suis en utilisant les touches Ctrl + C pour fermer l'invite d'entrée du programme (je suis sous Linux). Ensuite, si j'ouvre le fichier, il ne contient rien. Comment pourrais-je résoudre cela?

Y at-il un problème avec l'utilisation de fputs() & fgets()?

+0

Votre code va casser pour les lignes de 25 octets. Vous pouvez utiliser 'fgets (s, sizeof (s) -1, stdin)' et vous aurez mieux 'memeset (s, 0, sizeof (s));' avant. Et 'getline' est une meilleure fonction pour cela (parce qu'elle alloue dynamiquement la ligne). –

+0

@BasileStarynkevitch, la page de manuel de 'fgets' dit' fgets() lit au moins un caractère de taille inférieure au flux et les stocke dans le tampon pointé par s ..... Un '\ 0' est stocké après le dernier caractère du buffer'. Donc, il est sûr d'avoir 25 dans l'appel 'fgets()'. J'ai testé ce code avec des lignes de plus de 25 caractères. La raison de ne pas travailler est la mise en mémoire tampon. Ajouter 'fflush (fp)' a résolu le problème. Désolé pour le commentaire en retard. – Bhaskar

Répondre

3

Puisque C-C tue probablement le processus, en raison de la mise en mémoire tampon, les lignes ne vont pas au fichier (à moins qu'il y en ait beaucoup et qu'elles remplissent le tampon).

Vous devez terminer la sortie avec C-D (Unix) ou C-Z (Dos), et non C-C.

En note: fgets ne supprime pas le saut de ligne et fputs ajoute le sien. Mais je suppose que vous alliez remarquer que :-)

+0

Merci mon pote, tu as raison. Maintenant, je reçois une sortie correcte :) – Dinesh

Questions connexes