Estoy tratando de leer una sola línea de un archivo con el siguiente…

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

Donde EOL = #define EOL '\n' sin embargo, me sale el aviso… comparison between pointer and integer

¿Cuál es la manera correcta para lograr lo que estoy tratando?

InformationsquelleAutor Skizit | 2011-10-10

4 Comentarios

  1. 4

    fgets lee una cadena de caracteres, y el tipo de resultado es char*

    Me gustaría pensar que usted está pensando en fgetc lugar?

  2. 0

    Que usted necesita para eliminar la devuelve char* y comparar que a su EOL … no comparar el actual puntero de la dirección de sí mismo hasta el final-de-línea de caracteres.

    Cambiar el código para esto:

    char* return_val = NULL;
    while((return_val = fgets(c,BUF,f)) != NULL && *return_val != EOF)
    {
       puts(c);
    }
    
    if (retun_val == NULL)
    {
        //handle error
    }
  3. 0

    Tiene que examinar el contenido de c después de la llamada a fgets para determinar si una nueva línea fue incluido en la cadena devuelta:

    for (;;) { 
    if (fgets(c, BUF, f) == NULL) { /* identificador de error */} 
    if (strchr(c, EOL) != NULL) { 
    pone(c); 
    } else {break; } 
    } 
    
  4. 0

    fgets lee los caracteres de la secuencia y escribe en el buffer hasta que el búfer está casi lleno, o se encuentra un '\n' (devuelve NULL si la operación falla).

    Así que usted puede saber cuántos characeters eran de lectura (incluyendo la '\n') con strlen

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

    Ahora, uno de los 2 puede que las cosas han hapenned: un '\n' fue leído antes de que el búfer consiguió completo o el búfer de gor completo antes de una '\n' fue leído. Usted puede saber que fue por examinar el último carácter en el búfer

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

    Nota que chars siempre es (*) 1 o más, por lo que la expresión buffer[chars - 1] está bien.

    (*) podría ser 0, sólo con los datos binarios de entrada, pero que niega el uso de strlen y otras funciones de cadena.

Dejar respuesta

Please enter your comment!
Please enter your name here