Cita de: josri en 15 Marzo 2013, 07:28 AMLa segunda pregunta es como puedo leer el apellido pero que solo quede en un registro de 6 posiciones, por ejemplo:HERNANDEZ se guardaria como HERNAN o DIAZ se guardaria como DIAZ**(* = espacios en blanco), intente hacer esto con substr pero me marca error.Lo ideal seria que utilizaras solo las facilidades de la biblioteca estándar de C++ como la función getline y la clase string ...
Pero si piensas utilizar funciones como fscanf una solución es leer del archivo el apellido y almacenarlo en una variable temporal (eso para evitar ciertos detallitos de la función), a continuación lees del temporal los caracteres necesarios y los imprimes con el formato deseado.
Un ejemplo sencillo en C donde "temp" es la variable temporal y "campo" la ubicación final del apellido:
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *ape[] = {
"HERNANDEZ",
"DIAZ",
"GONZALEZ",
};
char temp[100];
char campo[100];
int i;
for (i = 0; i < 3; i++){
sscanf(ape[i], "%[^|]", temp); /* archivo ==> temp */
sprintf(campo, "%-6.6s", temp); /* temp ==> campo */
printf("\"%s\"\n", campo);
}
return EXIT_SUCCESS;
}
Su salida es:
Código [Seleccionar]
"HERNAN"
"DIAZ "
"GONZAL"
La cadena de formato "%-06.6s" se utiliza para indicar:
1) "-", alineación a la izquierda.
2) "6.", impresión con seis caracteres de ancho, los faltantes serán espacios.
3) ".6", se leen del argumento (en este caso temp) un máximo de seis caracteres.
Un saludo