Como devuelvo un carácter desde una función.

Iniciado por Felipe_Henriquez, 13 Diciembre 2011, 04:30 AM

0 Miembros y 1 Visitante están viendo este tema.

Felipe_Henriquez

Bueno muchachos les saludo y tengo la siguiente duda, como puedo devolver un carácter desde una función especificamente quiero devolver *, porque tengo un problema que dice así: escriba una función que despliegue en el margen izquierdo de la pantalla un cuadrado sólido de asteriscos cuyas medidas se especifiquen mediante el parámetro lado. Tendria que devolver:

****
****
****
****

La cosa es que no se como devolver carácteres y bueno dejo lo que yo hice hasta el momento a ver si me pueden dar una manito:

#include <stdio.h>
#include <cstdlib>

int figura( int a );

int main(){
   
   int numero;
   
       printf( "Porfavor ingrese un numero: " );
       scanf( "%d", &numero );
       figura( numero );
   
   printf( "\n" );
   system("PAUSE");
   return 0;
   
   }

int figura( int a ){

   int n = 1, n_1 = 1;
   
       while( n <= a){
       
              n_1 = 1;
              while( n_1 <= a ){
                     
                     ++n_1;      
                     printf ( "*" );
               }
       
       printf( "\n" );                
       ++n;      
       }

return 0;
}



De ante mano muchas gracias a los que responden y los que se dan el trabajo de leer para alguien puede parecer muy siemple pero lo cierto es que hasta ahora nada mas habia devuelto valores enteros, capaz y la solución sea devolver valores enteros y transformarlos a ASCI o capaz no es necesario si pueden responder lo mas antes posible les estaré muy agradecido. Saludos y un abrazo.

Ferno

#1
Vamos por partes, diría Jack:

Primero, todo el código que postees debe ir entre las etiquetas GeSHi correspondientes! (menú desplegable en la esquina superior derecha en la publicación de mensaje).

Segundo, es: "bueno dejo lo que yo hize hice hasta el momento haber a ver si me pueden hechar una manito"
De paso te ayudo con la ortografía ;)

Tercero: Hay un problema en la lógica del programa. El enunciado dice que la función debe mostrar por pantalla el cuadrado de asteriscos, dependiendo del valor pasado como parámetro. Ahora bien, entonces la función no debe retornar un caractér (*), sino que puede o no retornar nada (void), simulando un procedimiento, o un entero mostrando que todo salió bien (0).
Luego de pedir el número, llamas a la función creada y le pasas el valor del entero que le pediste al usuario! Dentro de la función, utilizas ese valor para mostrar el cuadrado por pantalla. Usar "printf" en el main o en cualquier otra función, da la misma funcionalidad, te muestra lo que le pases por referencia en la salida estándar!

Felipe_Henriquez

#2
Muchas gracias Ferno por tu respuesta, gracias a los datos que me diste sobre printf pude resolver el problema, a veces nos ahogamos en un vaso de agua, uh no se como postear el código en GeSHi si me dices como lo puedo hacer te estaría muy agradecido, y tengo otra duda con respecto a un problema similar como puedo ingresar un carácter al programa, porque ahi un problema muy similar nada más que ahora si paso por parámetro un # debería imprimir ese carácter con el tamaño del número ingresado. Tengo la idea que podría ser algo asi int figura( int a, char b ) suponiendo que una variable de tipo char puede guardar cualquier carácter como estos: "@ #" si estoy en lo correcto no se, pero una vez guardado ya nada mas es suplantar el caracter de printf en el primer ejercicio por el contenido de la variable char b? saludos!

Ferno

Para la etiqueta GeSHi, cuando das click a "responder, tienes todo lo necesario justo arriba del cuadro de texto para darle formato a tu mensaje. A la derecha está el menú desplegable de arriba que dice GeSHi. Debes seleccionar el código aquí en el cuadro de texto, pulsar el menú desplegable y elegir el lenguaje que utilizaste.

Hay una cosa más sobre tu primer code, y es que si estás trabajando en C, la librería que querés agregar es stdlib.h, porque cstdlib es de C++. (De igual forma, recomiendo no usar "system("pause");" y usa "getchar();" para pausar el programa.

Sobre tu última duda, postea el código que pienses y te ayudaré a arreglarlo, pero postea el código correspondiente.

Felipe_Henriquez

Gracias por tu respuesta tan pronta Ferno :D, bueno ya encontre lo de GeSHi y aprendí a utilizarlo, a lo de usar system("PAUSE"); fue nada más esta semana porque siempre utilicé Geany en GNU/Linux para programar y nunca tuve necesidad de pausar el programa, y gracias por recomendarme getchar(); se necesita alguna libreria?, y con lo de respecto a <cstdlib>, lo usé porque el compilador no me permitia compilar con <stdlib.h>, y me dí cuenta que es porque guardaba mis archivos fuentes en cpp. Pasando al tema que nos concierne acá está mi código lo compilé y no funciona

#include <stdio.h>
#include <cstdlib>

int figura( int a, char b );

int main(){

    int numero;
    char caracter;
   
        printf( "Porfavor ingrese un numero: " );
        scanf( "%d", &numero );
        printf( "Porfavor ingrese una carácter: ");
        scanf( "%c", &caracter );
       
        figura( numero, caracter );

    printf( "\n" );
    system("PAUSE");
    return 0;

    }

int figura( int a, char b ){

    int n = 1, n_1 = 1;

        while( n <= a){

               n_1 = 1;
               while( n_1 <= a ){

                      ++n_1;       
                      printf ( "%c", b ); /* Cómo hacer para que imprima el carácter */
                }

        printf( "\n" );               
        ++n;     
        }

return 0;
}


Bueno no sé como funciona la variable char, y no tengo idea de como imprimir carácteres con el puedo usar también %s no? un abrazo y espero tu explicación, gracias a ti pude resolver el primero casi nunca me gusta consultar me gusta cabecearme pero ahora estoy un poco contra el tiempo por eso más que nada pregunté a y tampoco asisto a clases de programación nada más soy empírico y porque me gusta esto :D y bueno haber si el próximo año entro a estudiar algo relacionado saludos!

Ferno

Tu código funciona. Simplemente lo que sucede es que tienes que limpiar el buffer de entrada del teclado luego del scanf.
Esto sucede porque, específicamente en tu programa, la función scanf toma el número que ingresaste, y deja otro caractér que se escribió (el enter! "\n"). Como debes saber, el salto de línea es un caractér, por ende, es leído por el segundo scanf (el que justamente pide un caractér), y la función imprime el caractér de salto de línea a :P
Lo que debes hacer es utilizar:

while(getchar()!='\n');

luego de la primer llamada a scanf y listo!

Espero que te haya quedado claro, sino, pregunta de vuelta.