dividiendo la cuerda en c

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.

  1. Lea toda la línea en.

  2. Utilice strchr para encontrar la coma.

  3. Haz lo que quieras con los dos primeros personajes.

  4. Cambia la coma por un cero, marcando el final de una cadena.

  5. Llame a strcpy desde el cuarto carácter para extraer la parte sssssss .

  6. 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:

  1. Su FILE * ,
  2. La cadena de formato,
  3. Una matriz de 3 caracteres convertidos silenciosamente en un puntero,
  4. Una matriz de 9 caracteres convertidos silenciosamente en un puntero,
  5. … y un puntero a 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:

  1. Necesitamos leer dos caracteres, el formato es “% c% c”.
  2. Luego omita un espacio (solo agréguelo a la cadena de formato) – “% c% c”.
  3. Luego lee una cadena hasta que golpeamos una coma. No te olvides de especificar el tamaño máximo de la cadena. Por lo tanto, el formato es “% c% c% 10 [^,]”. 10 – caracteres máximos para leer. [^,] – lista de caracteres permitidos. ^, – significa todos excepto una coma.
  4. Luego omita una coma – “% c% c% 10 [^,],”.
  5. Y finalmente lea un entero: “% c% c% 10 [^,],% d”.
  6. El último paso es asegurarse de que todos los 4 tokens sean leídos: verifique el valor de retorno de fscanf.

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);