2010-03-06 4 views
0

Fondamentalement, j'ai des problèmes avec mon code - ce sont des devoirs donc préférez ne pas le poster ici pour des raisons évidentes. Si cela devient vraiment important pour moi de le faire alors je devrai car je suis tellement coincé.fgets - omet la dernière ligne de c

Je lis 2 fichiers texte et il a également un séparateur, ces valeurs proviennent de la ligne de commande, simplement supposer que le séparateur dans ce cas est xx

File a 
a 
b 
c 


File b 
d 
e 

Output should be 
axxd 
bxxe 
cxx 

le problème est que mon code juste doesn « t faire la dernière ligne correctement

i obtenir une sortie de

axxd 
bxxe 

Je vous espère que les gars peuvent recueillir ce que je fais mal sans me afficher tout mon code, mais ma logique fonctionne o n ce principe;

while not at the end of the file for files a and b 
    get a line using fgets from a 
    create a character pointer and set it to the first occurrence of \n in the line using strchr 
    if the pointer isn't null 
     set the pointers value to be the end of line 

get the line from b as above 
and now write the line from a, the separator and the line from b to file 
+1

montre un échantillon minimal du code C que vous rencontrez le problème avec –

+0

Almsot impossible, en raison du fait que ses 8 lignes de code seulement: S – Biscuit128

+1

Vous êtes réticent à poster 8 lignes de code? Quelque chose utilisant while() et fgets() est une question de haute sécurité? –

Répondre

3

Ceci est votre premier problème logique: while(!feof(a) && !feof(b))

Cela signifie que si soit le fichier a atteint la fin alors vous arrêtez le traitement, même s'il y a plus de lignes dans l'autre fichier.

+0

merci, cela me donne soemthign de travailler, mais le premier moyen que vous avez trouvé plus : S !! – Biscuit128

+0

Bon vieux drapeau EOF. Ils devraient mettre dans la documentation "N'UTILISEZ JAMAIS CETTE FONCTION POUR TESTER SI VOUS POUVEZ LIRE PLUS", alors peut-être que les gens resteraient à l'écart. – Tronic

+0

Eh bien, si vous changez juste la condition while et laissez le code tel quel, vous essayerez d'appeler 'fgets' sur les flux qui sont potentiellement à' EOF'. Vous devez vérifier la valeur de retour de 'fgets' pour vous assurer que vous ne traitiez pas les anciens contenus du tampon comme des données nouvellement lues. –

0

Peut-être que vous ne pas imprimer une nouvelle ligne après l'impression de la dernière ligne? Ensuite, il peut ne pas s'afficher sur votre écran du tout. Notez que fgets ne place un retour à la ligne que si la ligne d'origine en a une et que la dernière ligne d'un fichier ne l'est pas.

Questions connexes