2009-02-14 11 views
1

Je suis en train d'écrire un code qui lit un fichier et ignore les sauts de ligne (\ n), jusqu'à présent, j'ai:Ignorer les sauts de ligne dans C

c = fgetc(fp); 
for(int loop = 0; c != EOF; loop++) 
{ 
    if((c != '\n') && (c != '\\')) 
    { 
     buffer[loop] = c; 
    } 
    c = fgetc(fp); 
} 

mais juste pas semblant d'ignorer la '\ n' bits (pas sûr de la '\')

et désolé pour la mise en page du code, le site ne semble pas que ma version d'Opera :(

Edit: Merci les gars , J'ai codé pour environ 6 heures d'affilée et complètement négligé l'incrément, ce qui explique pourquoi je pensais que le \ n resté immobile. Je ne savais pas non plus à propos du Linux, mais j'essayais de faire de la plate-forme multi-plateforme, donc c'est utile.

Répondre

6

Quel système d'exploitation utilisez-vous? \ n sur Windows est deux caractères (\ r \ n). Si vous voulez seulement ignorer les nouvelles lignes, la deuxième condition n'est pas nécessaire.

Mais un autre problème est que vous incrémenter variable de boucle à chaque fois! Vous ne devez incrémenter 'loop' que lorsque vous ajoutez des éléments dans le buffer! Prenez 'loop ++' loin de for (..) et ajoutez-le au buffer [loop ++] = c ;. Très probablement, vous obtenez des caractères aléatoires dans le tampon à la place de '\ n': s, qui peuvent bien être des zéros, par exemple.

+0

Sous Windows, un fichier ouvert en mode texte (à savoir sans le caractère 'b' dans l'argument de mode de fopen) aura \ r \ n séquences changé \ n par stdio. – Doug

8

essayer cette

while ((c = fgetc(fp)) != EOF) 
{ 
    if (c != '\n' && c != '\r') 
    { 
    buffer[loop++] = c; 
    } 
}