2011-10-10 4 views
0

Je tente de lire une seule ligne à partir d'un fichier en utilisant les éléments suivants ...en C EOL détecter en utilisant fgets

while(fgets(c,BUF,f) != EOL){ 
    puts(c); 
} 

Où EOL = #define EOL '\n' cependant, je reçois l'avertissement ... comparison between pointer and integer

Quelle est la bonne façon de réaliser ce que j'essaie?

Répondre

4

fgets lit une chaîne, et le type de résultat est char*

je penserais que vous pensez fgetc à la place?

0

Vous devez déréférencer le char* retourné et le comparer à votre EOL ... ne pas comparer l'adresse réelle du pointeur au caractère de fin de ligne.

Changer votre code à ceci:

char* return_val = NULL; 
while((return_val = fgets(c,BUF,f)) != NULL && *return_val != EOF) 
{ 
    puts(c); 
} 

if (retun_val == NULL) 
{ 
    //handle error 
} 
0

Vous devez examiner le contenu de c après l'appel à fgets pour déterminer si une nouvelle ligne a été inclus dans la chaîne retournée:

 
for (;;) { 
if (fgets(c, BUF, f) == NULL) { /* handle error */ } 
if (strchr(c, EOL) != NULL) { 
    puts(c); 
} else {break; } 
} 
0

fgets lit les caractères du flux et les écrit dans le tampon jusqu'à ce que le tampon soit presque plein ou qu'il trouve un '\n' (il renvoie NULL si l'opération échoue).

Vous pouvez donc savoir combien de characeters ont été lus (y compris le '\n') avec strlen ...

ret = fgets(buffer, sizeof buffer, stdin); 
if (ret == NULL) /* deal with error */; 
chars = strlen(buffer); 

Maintenant, l'une des 2 choses ont peut-être hapenned: soit un '\n' a été lu avant que le tampon a plein ou le buffer gor complet avant la lecture d'un '\n'. Vous pouvez savoir qui était en examinant le dernier caractère dans la mémoire tampon

if (buffer[chars - 1] == '\n') /* full line read */; 
else /* incomplete line */; 

Notez que chars est toujours (*) 1 ou plus, donc l'expression buffer[chars - 1] est ok. (*) Il peut s'agir de 0 uniquement avec des données binaires pour l'entrée, mais cela interdit l'utilisation de strlen et d'autres fonctions de chaîne.

Questions connexes