Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Funcion para leer un string

Estas en el tema de Funcion para leer un string en el foro de C/C++ en Foros del Web. Recien estoy empezando a aprender el lenguaje C y bueno la cosa es que no logro hacer una funcion que me devuelva un scring leido ...
  #1 (permalink)  
Antiguo 02/09/2008, 22:00
Avatar de dots3r  
Fecha de Ingreso: julio-2008
Mensajes: 106
Antigüedad: 15 años, 9 meses
Puntos: 5
Funcion para leer un string

Recien estoy empezando a aprender el lenguaje C y bueno la cosa es que no logro hacer una funcion que me devuelva un scring leido con scanf, del tipo:

Código:
int leeEntero() {
    int entero;
    scanf("%d",&entero);
    return entero;
}
Lo intento pero el compilador me tira errores, esto es lo que llevo:
Código:
char leeString() {
    char cadena[40];
    scanf("%s",&cadena);
    return *cadena; //Si no le pongo el * me da error =(
}
Ahora bien el error viene cuando intento guarda ese valor en una "variable" de un struct:
Código:
struct Alumno {
    char Nombre[40];
    char noControl[10];
    char Carrera[25];
    int Semestre;
}Alumnos;

Alumnos.Nombre = leeString();
// Me tira error de compatibilidad de datos
Alumnos.Semestre = leeEntero();
// Todo perfecto.
Alguno de ustedes puede iluminarme?
De antemano Gracias.
  #2 (permalink)  
Antiguo 02/09/2008, 22:57
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Funcion para leer un string

Estás retornando un char, tienes que retornar un apuntador a la cadena de caracteres, además la cadena de caracteres esta declarada de forma tal que se perdería su valor al terminar la función, por lo que debería ser static, así:
Código:
char *leeString() {
	static char cadena[40];
	scanf("%s",&cadena);
	return cadena;
}
En cuanto a:

Código:
Alumnos.Nombre = leeString();
No se puede hacer asignaciones de ese tipo con cadenas de caracteres, se debe usar una función de copia:

Código:
strcpy(Alumnos.Nombre, leeString());
Aunque me parece más fácil hacerlo directamente, evitando tener que crear una función:
Código:
scanf("%s",&Alumnos.Nombre);
  #3 (permalink)  
Antiguo 05/09/2008, 22:28
 
Fecha de Ingreso: mayo-2006
Ubicación: Venezuela
Mensajes: 33
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Funcion para leer un string

Otra acotación, es ideal no usar scanf para leer cadenas de caracteres, se recomienda el uso de gets
  #4 (permalink)  
Antiguo 06/09/2008, 16:49
Avatar de dots3r  
Fecha de Ingreso: julio-2008
Mensajes: 106
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Funcion para leer un string

ok muchas gracias, ya he entendido un poco mejor :P
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:07.