Necesito para importar algunos datos de una data.txt archivo en un programa en C. Mi fuente de datos es como este:

A ABC001 B
A ABC002 B
A ABC003 C
B ABC004 C
B ABC005 E
C ABC006 B
D ABC007 A
D ABC008 B
E ABC009 D

He definido un nuevo tipo de datos para tener toda la información:

typedef struct node {
    char street_name;
    char number_plate[7];
    char destination;
} Car;

Aquí está mi intento de importar los datos desde el archivo de arriba en una matriz:

int main(void)
{
    FILE *file;
    int i = 0;
    Car carinfo[9];

    file = fopen("data.txt", "r");

    while (EOF != fscanf(file, "%c %6s %c", &carinfo[i].street_name,
                                            &carinfo[i].number_plate, 
                                            &carinfo[i].destination))
    {
        printf("Loop #%d\n", i+1);
        i++;
    }



    for (i = 0; i < 9; i++)
    {
        printf("Street Name: %c, Number Plate: %s, Destination: %c\n", carinfo[i].street_name, 
                                                                       carinfo[i].number_plate, 
                                                                       carinfo[i].destination);
    }

    fclose(file);
    return 0;
}

La while bucle se ejecuta 10 veces y, a continuación, hace que el programa se cuelgue, porque al parecer se hace caso omiso de la EOS que debería evitar que otra iteración.

Lo que estoy haciendo mal aquí? Puede alguien por favor me ayude a averiguar?

  • Por favor, incluya siempre el correcto encabezados en sus ejemplos.
  • Qué resultado obtienes?
  • No se choque con un fallo de segmentación?
InformationsquelleAutor haunted85 | 2014-03-30

1 Comentario

  1. 2

    Favor de cambiar

    while (EOF != fscanf(file, "%c %6s %c", &carinfo[i].street_name,

    a

    while (3 == fscanf(file, " %c %6s %c", &carinfo[i].street_name,

    e inténtelo de nuevo.

    Cada línea en el archivo de entrada tiene un salto de línea y debe ser ignorado, el espacio antes de la primera %c que hará.

    • Funciona!! Gracias. Podría explicar qué fue mal?
    • Está usted seguro de que copiar y pegar mi código?
    • Yo no me di cuenta de que el espacio extra… fija y funciona de maravilla. Gracias.
    • Pero tenga cuidado: Si usted no tiene exactamente 9 entradas, su programa se bloquee. Si más, en el análisis, si es menos, en la impresión.
    • Sí, ese es otro problema que necesita ser arreglado. Si usted no sabe el número de líneas de antelación, a través de realloc() parece ser la única manera de manejar esto.
    • Se añadió una explicación a mi respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here