Es común leer hasta el final del archivo, pero estoy interesado en cómo podía leer los datos (una serie de números) a partir de un archivo de texto hasta el final de un línea? Tengo la tarea de leer varias series de números de un archivo, que se colocan en las nuevas líneas. Aquí es un ejemplo de entrada:

1 2 53 7 27 8
67 5 2
1 56 9 100 2 3 13 101 78

Primera serie: 1 2 53 7 27 8

Segundo: 67 5 2

Tercera: 1 56 9 100 2 3 13 101 78

Tengo que leer por separado del archivo, pero cada uno hasta el final de la línea. Tengo este código:

    #include <stdio.h>
    FILE *fp;
    const char EOL = '\0';
    void main()
    {
        fp = fopen("26.txt", "r");
        char buffer[128];
        int a[100];
        int i = 0;
        freopen("26.txt","r",stdin);
        while(scanf("%d",&a[i])==1 && buffer[i] != EOL)
             i++;
        int n = i;
        fclose(stdin);
     }  

Lee hasta el final del archivo, por lo que no hace exactamente lo que yo esperaría. ¿Qué sugiere usted?

Ninguna razón específica para el uso de freopen y leer desde la entrada estándar stdin?

OriginalEl autor Eszter | 2012-12-22

2 Comentarios

  1. 5

    Uso fgets() para leer una línea completa, a continuación, analizar la línea (posiblemente con strtol()).

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
      char buffer[10000];
      char *pbuff;
      int value;
    
      while (1) {
        if (!fgets(buffer, sizeof buffer, stdin)) break;
        printf("Line contains");
        pbuff = buffer;
        while (1) {
          if (*pbuff == '\n') break;
          value = strtol(pbuff, &pbuff, 10);
          printf(" %d", value);
        }
        printf("\n");
      }
      return 0;
    }

    Puede ver la código que se ejecuta en ideone.

    Si usted va a utilizar esta idea, asegúrese de agregar el código para lidiar con extraños entradas (archivos con datos erróneos (incluyendo extra largas líneas), líneas en blanco, líneas con espacios, vacíos de archivos, …, …)

    OriginalEl autor pmg

  2. 2

    El \n debe ser la vía de escape para la nueva línea, pruebe en lugar

    const char EOL = '\n';

    hizo u obtener trabajo? esto debería ayudar:

    #include <stdio.h>
    FILE *fp;
    const char EOL = '\n'; //unused . . .
    
    void main()
    {
        fp = fopen("26.txt", "r");
        char buffer[128];
        int a[100];
        int i = 0;
        freopen("26.txt","r",stdin);
    
        while(scanf("%i",&a[i])==1 && buffer[i] != EOF)
            ++i;
    
        //print values parsed to int array.    
        for(int j=0; j<i; ++j)
            printf("[%i]: %i\n",j,a[j]);
    
        fclose(stdin);
    }  

    OriginalEl autor rbtLong

Dejar respuesta

Please enter your comment!
Please enter your name here