Discussion:
void imprime_Fibonacci;
(demasiado antiguo para responder)
Olaf "El Blanco"
2005-11-18 20:58:11 UTC
Permalink
Quería hacer una función que no devuelva nada, un procedimiento.
A la hora de declararlo, me da error si no le indico ningún parámetro.

void imprime_Fibonacci; <error>
void imprime_Fibonacci(int a); <sin error>

Por otro lado me gustaría hacer mi primer menú (modo texto) en Lenguaje C.
Me preguntaba si es muy complicado...

¿Como le digo al C, que quiero que me imprima el código ASCII de las teclas
que inserto? Como se habrán dado cuenta necesito identificar las teclas ESC,
y las flechas arriba y flecha abajo.

También si me pueden decir como hago para resaltar la oración del menú en la
que me encuentro. creo recordar que hace mucho usaba textcolor y
textbackground, y no se cual es el equivalente.

De antemano Gracias!
--
*****************************************************
"...Winds and storms, embrace us now,
Lay waste the light of day.
Open gates to darker lands...
We spread our wings and fly away..."
*****************************************************
wastedyears
2005-11-19 17:51:55 UTC
Permalink
Hola :)
Post by Olaf "El Blanco"
A la hora de declararlo, me da error si no le indico ningún parámetro.
void imprime_Fibonacci; <error>
void imprime_Fibonacci(int a); <sin error>
La forma de declararlo para que no te de fallos es: void
imprime_Fibonacci(void); o simplemente void imprime_Fibonacci(); C es
muy pijotero para estos temas ;)

Lo del menú... no sé, yo no me sentiría capaz, pero bueno... te
cuento lo que se (brevemente, que me tengo que largar...). Hasta donde
se, en C no es posible a priori capturar pulsaciones sin más, siempre
que no vayan seguidas de un enter (que me corrijan si me equivoco, por
favor). Si usas unix, puedes usar la función Select que multiplexa la
e/s asíncrona. O sea, te permite para el programa o hacerle esperar
una entrada desde la consola. No sé si en windows hay algo parecido,
sería cuestion de que buscaras en la ayuda del compilador.

Imprimir el código ascii de un caracter no es difícil. Por ejemplo
char c = 'a';
printf("%c", a); /* Muestra 'a' en pantalla */
printf("%d", a); /* Muestra 97, ascii de 'a' */

O sea, no tienes más que tratarlo como un entero, en C los tipos
caracter y entero son equivalentes.

Respecto a lo de resaltar la oración, en Windows no conozco los
códigos del terminal. Si usas unix puedo ayudarte, no es muy
complicado...

Un saludo, espero serte útil...
newton
2005-11-25 19:19:56 UTC
Permalink
Aquí te pongo un código que tuve que hacer para un ejercicio. Lo hice
con Borland, para windows y usando la librería conio.h además de la
stdio.h.

/* Realizar un procedimiento que imprima un menú en la pantalla,
pudiéndose
desplazar el usuario por las opciones del menú con las flechas arriba
y abajo.
Se sabrá en qué opción está el usuario porque tendrá otro color de
texto y estará
señalado por una flecha. El usuario elegirá una opción pulsando
intro. Se
imprimirá la opción que ha elegido */

#include <stdio.h>
#include <conio.h>

void main(void){
int opcion = 1;
char tecla = 1;

_setcursortype(_NOCURSOR);

// Mientras no se pulse INTRO se ejecutará todo el código para
poder
// seguir cambiando de opción
while(tecla!=13){
// Se dibuja el menú sin color
gotoxy(4,1);
printf("1.- Opcion 1");
gotoxy(4,2);
printf("2.- Opcion 2");
gotoxy(4,3);
printf("3.- Opcion 3");
gotoxy(4,4);
printf("4.- Opcion 4");


// Si llegamos aquí quiere decir que se ha pulsado una de las
flechas
// o la tecla INTRO, de lo contrario aún seguiríamos en el
bucle final
// que recoge la tecla pulsada.
// También puede ser que sea la primera ejecución del bucle
y aún
// no se haya capturado ninguna tecla.

// Ahora comprobamos cuál de las teclas se ha pulsado.
// Si se ha pulsado la tecla flecha arriba, cuyo valor ASCII
es 72,
// decrementamos el valor de opción en 1. Opción es una
variable que
// nos devuelve la posición del menú en la que nos
encontramos.
if(tecla == 72){
opcion = opcion--;
if(opcion < 1){
opcion = 4;
}
}
else{
// Se hace lo mismo que antes pero para la flecha abajo, por
lo que
// se incrementa la variable opción en vez de
decrementarla.
if(tecla == 80){
opcion = opcion++;
if(opcion > 4){
opcion = 1;
}
}
}

// Configuramos el color de fondo, que nos servirá para
resaltar la opción
textbackground(10);

// Nos situamos en la coordenada adecuada dependiendo de la
opción en la
// que nos encontremos. El valor de la x es constante para que
todos
// los elementos del menú permanezcan alineados. La Y la
sustituiremos
// por la variable opción, de modo que si hemos seleccionado
la opción
// 1 pintará en la linea 1, si tenemos opción 2 pintará en
la linea 2...
gotoxy(4,opcion);
cprintf("%d.- Opcion %d", opcion, opcion);


// Si la tecla pulsada no es INTRO, quiere decir que ha sido
una flecha
// ya que de lo contrario no habríamos llegado hasta aquí
(excepto si es
// la primera ejecución del bucle en la que aún no se ha
capturado ninguna
// tecla y esto no tendrá efecto).
// Como queremos poder seguir desplazándonos por el menú
hasta que se
// pulse intro, le daremos a la variable tecla el valor 1 para
que vuelva
// a entrar en el bucle de captura de tecla. Le podríamos
haber dado
// cualquier valor que no sea 72, 80 ni 13

if(tecla!=13){
tecla = 1;
}

// Mientras la tecla pulsada sea distinta de todas las teclas
// válidas para el menú, se ejecutará el código que
captura la tecla
// Son teclas válidas las flechas arriba y abajo y la tecla
INTRO
while(tecla!=72 && tecla!=80 && tecla!=13){

// Se lee el valor ASCII de la tecla
tecla=getch();
// Si fuera 0, significa que es un carácter ASCII
extendido, como
// en el caso de las flechas. En esta situación, y puesto
que todos
// los caracteres extendidos comienzan por cero, nos
interesa el
// segundo valor, de modo que volvemos a capturarlo con un
getch()
// desechando así el 0
if(tecla==0){
tecla=getch();
}
}
}

gotoxy(4,6);
printf("Se ha elegido la opcion: %d",opcion);
getch();
}

Loading...