SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: dayler en Miércoles 20 de Septiembre de 2006, 23:07

Título: Función Que Devuelve Una Cadena.
Publicado por: dayler en Miércoles 20 de Septiembre de 2006, 23:07
hola
tengo problemas a la hora de implementar la siguiente función:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

 char leerPantalla()
  {

   char nombre[20];
    scanf("%s",nombre);
    return *nombre;
   }
   
   
int main()
{
    int *nombre;
    cout<<"NOMBRE:"<<endl;
    *nombre=leerPantalla();
    cout<<nombre<<endl;
    system("pause");
    return 0;
}

el programa debe de leer una cadena de tecladoydesplegarla en pantalla.
Título: Re: Función Que Devuelve Una Cadena.
Publicado por: JuanK en Miércoles 20 de Septiembre de 2006, 23:26
Código: Text
  1. #include &#60;iostream&#62;
  2. #include &#60;stdlib.h&#62;
  3. #include &#60;stdio.h&#62;
  4. using namespace std;
  5.  
  6.  char leerPantalla()
  7.   {
  8.  
  9.    char nombre[20];
  10.     scanf(&#34;%s&#34;,nombre);
  11.     return *nombre;
  12.    }
  13.    
  14.  

error 1: estas devolviendo un apuntador a char
Código: Text
  1. return *nombre;
  2.  
pero la funcion dice que solo devuelves un char
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->char leerPantalla()<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

Sin contar que no le estas indicando al scanf que solo capture los 20 caracteres por seguridad..
   
error 2 :
Código: Text
  1.     int *nombre;
  2.     *nombre=leerPantalla();
  3.  

si la funcion devuelve char ( aunque deberia ser char*) porque recibes los datos en un int* ?
Título: Re: Función Que Devuelve Una Cadena.
Publicado por: shakka en Miércoles 20 de Septiembre de 2006, 23:32
Y que problemas tienes?

Algo que noto es que la funcion leerPantalla() devuelve por cola un caracter y al invocarla estas recogiendo el resultado con puntero a entero.

Porque no la devuelves por boca.

Es decir:

Código: Text
  1. //la funcion no es nada funcional
  2. //(valga la redundancia, ya que solamente usa scanf... pero bueno me imagino
  3. //que es para practicar con funciones)
  4.  
  5. void leerPantalla(char *nombre)
  6. {
  7.   scanf(&#34;%s&#34;,nombre);
  8. }
  9.  
  10. y la invocas
  11.  
  12. ...
  13.  
  14. char *cadena;
  15.  
  16.   leerPantalla(cadena);
  17.  
Título: Re: Función Que Devuelve Una Cadena.
Publicado por: dayler en Jueves 21 de Septiembre de 2006, 00:42
hola otra ves soy yo...

bueno si que respondieron rápido, primeramte indicar que la introducción de

  int *nombre, fuen involuntaria, lo que en realidad iva era char *nombre,
beuno de todas formas les agradesco a todos los que se tomaron la molestia de responderme, lo que en realidad debia de acer la función es retornar una cadena, no importa de donde, pero gracias a dios descubri la función 'gets()', que soluciona mi problema, nuevamente gracias... y hasta pronto. :)
Título: Re: Función Que Devuelve Una Cadena.
Publicado por: Geo en Jueves 21 de Septiembre de 2006, 01:10
Ya que estás con Visual C++, lo mejor es que no uses gets y en su lugar emplees gets_s:

gets_s (CRT) (http://msdn2.microsoft.com/en-us/library/5b5x9wc7.aspx)

O también pasarte al uso de string :).

Saludos,
JJ (Geo).
Título: Re: Función Que Devuelve Una Cadena.
Publicado por: Eternal Idol en Jueves 21 de Septiembre de 2006, 07:50
¿Nadie nota que la variable nombre en la funcion leerPantalla es local? Esa variable esta en la pila ... no la podes usar asi tan alegremente ...