Tengo un archivo donde cada línea se ve así:
cc ssssssss,n
donde las dos primeras ‘c’ son caracteres individuales, posiblemente espacios, luego un espacio después de eso, las ‘s’ son una cadena que tiene 8 o 9 caracteres de largo, luego hay una coma y luego un entero.
Soy realmente nuevo en C y estoy tratando de averiguar cómo poner esto en 4 variables separadas por línea (cada uno de los dos primeros caracteres, la cadena y el número)
¿Alguna sugerencia? He visto fscanf y strtok pero no estoy seguro de cómo hacer que funcionen para esto.
Gracias.
Supongo que esta es una pregunta C, como sugiere la pregunta, no C ++ como quizás sugieren las tags.
Lea toda la línea en.
Utilice strchr
para encontrar la coma.
Haz lo que quieras con los dos primeros personajes.
Cambia la coma por un cero, marcando el final de una cadena.
Llame a strcpy
desde el cuarto carácter para extraer la parte sssssss
.
Llame a atoi
en un carácter pasado donde la coma era para extraer el entero.
Una cadena es una secuencia de caracteres que termina en el primer '\0'
. Mantén esto en mente. Lo que tienes en el archivo que describiste no es una cadena.
Supongo que n
es un número entero que podría abarcar varios decimales y podría ser negativo. Si ese es el caso, creo que la cadena de formato que necesita es "%2[^ ] %9[^,\n],%d"
. Querrás pasar fscanf
las siguientes expresiones:
FILE *
, int
. Almacene el valor de retorno de fscanf en un int. Si fscanf devuelve negativo, tiene un problema como EOF o algún otro error de lectura. De lo contrario, fscanf le dice a cuántos objetos le asignaron valores. El valor de “éxito” que está buscando en este caso es 3. Cualquier otra cosa significa una entrada con formato incorrecto.
Sugiero leer el manual de fscanf para obtener más información y / o para aclarar.
La función fscanf es muy poderosa y puede usarse para resolver su tarea:
Aquí está la solución completa:
FILE *f = fopen("input_file", "r"); do { char c1 = 0; char c2 = 0; char str[11] = {}; int d = 0; if (4 == fscanf(f, "%c%c %10[^,],%d", &c1, &c2, str, &d)) { // successfully got 4 values from the file } } while(!feof(f)); fclose(f);