La gran mayoría de los programas necesitan la interacción entre el usuario y la máquina. Desde la simple calculadora, hasta las complejas GUIs necesitan que el usuario introduzca datos. En este tutorial vamos a complicar un poco las cosas y vamos a construir un programa que no funcionará si no interactuas con él.
Primero vamos a estudiar un poco la función scanf. Ésta es el equivalente e inverso de la función printf, de hecho también se incluye en la librería estándar de C (stdio.h). Funciona exactamente igual que printf, pero al inverso. Es decir en vez de "devolver" datos, "recibirá". No te costará aprenderla.
Vamos a analizar un pequeño programa que hice para introducirte a este bella función, lo digo y lo seguiré diciendo: Escribe el código, no hagas copy-paste. Mucha teoría y poca programación, aquí va:
/*Entrada y Salida: scanf*/ #include <stdio.h> int main() { float a; char b; printf("Introduce un numero: "); scanf("%f",&a); printf("Intrduciste el numero: %f\n",a); getchar(); printf("Introduce una letra: "); scanf("%c",&b); printf("Introduciste la letra %c\n\n",b); printf("Presiona Enter pasa Salir"); getchar(); getchar(); return 0; }
No es necesario que explique lo que ya todos sabemos (si no lo sabes, regresa al primer tutorial). Iré al grano:
Declaramos las variables, una de tipo float y una de tipo char.
printf("Introduce un numero: ");
Mostramos por pantalla el mensaje entre comillas "".
scanf("%f",&a); printf("Intrduciste el numero: %f\n",a);
Y aquí está scanf. Lo que hace está función es "escanear el teclado, en busca de una tecla activa". Ahora vamos a ver como se utiliza. Entre paréntesis tenemos un % y una letra, al igual que en printf usamos el % acompañado de una letra para indicar con qué tipo de dato estamos trabajando. En este caso estamos diciendo que el teclado escanee en busca de números flotantes. Al final de las comillas encontramos otro argumento &a esto hace que lo que se introduzca en el teclado, quede guardado en la variable a (declarada anteriormente y de tipo float) y termina la función con su ; obligatorio.
El número, entero (ej:2.00000) o decimal (ej:2.3456) quedó guardado en la variable a. Ahora, para comprobar si la función scanf funciona, vamos a pedir que el programa muestre la variable a en pantalla, esto ya lo conoces. ¡Sorpresa! En pantalla aparece el número que introducimos previamente. Así de simple operan y pueden coexistir las funciones más importantes de C.
En el mismo programa incluyo otro ejemplo similar, pero, trabajando con caracteres.
Antes de empezar con esta parte, quiero que se note el getchar() entre los dos "bloques". La máquina interpreta el código ya compilado en el orden en que fue escrito, sin ese getchar(), al imprimir en pantalla, se "brincaría" a la siguiente parte, llegando incluso a dar errores extraños, para mantener esto controlado, ponemos esta función, que espera a que se presione "Enter" para seguir.
Ahora sí:
Imprimimos en pantalla el mensaje. Llamamos a scanf, pero fíjate que ahora usamos un %c, por lo tanto escaneará en busca de caracteres (Recuerda que char, también puede almacenar un entero, por lo tanto podrás introducir un número sin problemas) y almacenamos en b (Previamente declarada como tipo char).
Después imprimimos b en pantalla, el resultado es el mismo que introducimos previamente.
Finalmente, terminamos el programa con una frase "Presiona Enter para salir".
Quiero que se note que los signos guardan cierta congruencia; por ejemplo, a es tipo float, en él se almacena un número y al imprimirlo lo imprimimos como tipo float; b es del tipo char, va a almacenar un caracter t se imprime como tal. Tal vez te pueda parecer redundante, pero puede ser un error muy dificil de encontrar.
Con esto tienes suficiente para poder manejar esta función. Ahora vamos a hacer un programa propiamente dicho, es sencillo, pero te servirá como un buen ejemplo para jugar tú mismo con la programación en C.
Un código vale más que mil palabras. Aquí va:
/*Edad*/ /*Un simple programa que calcula tu edad. Fíjate que sólo uso las funciones básicas de entrada y salida: printf y scanf*/ #include <stdio.h> int main() { int nacimiento, actual, edad; printf("Introduce tu año de nacimiento: "); scanf("%i",&nacimiento); getchar(); printf("Introduce el año actual: "); scanf("%i",&actual); getchar(); edad = actual - nacimiento; printf("Tienes aproximadamente %i años\n\nPresiona Enter para Salir", edad); getchar(); return 0; }
Iniciamos el programa llamando a 3 variables del tipo int:
int nacimiento, actual, edad;
No es necesario asignarles un valor.
Después mostramos un mensaje en pantalla y escaneamos en busca de un número entero. Al terminar esto, esperamos a que se presione enter, los motivos ya fueron explicados.
printf("Introduce tu año de nacimiento: "); scanf("%i",&nacimiento); getchar();
Fíjate como se almacena en nacimiento, con la ayuda de &, no lo olvides.
Después pedimos que se introduzca el año actual. El proceso es el mismo:
printf("Introduce el año actual: "); scanf("%i",&actual); getchar();
Ahora almacenamos en edad la diferencia de actual y nacimiento, dando como resultado una edad aproximada.
edad = actual - nacimiento;
Y finalmente imprimimos actual en pantalla. Finalizamos el programa.
Esto ya lo sabes, sólo quiero mostrar un ejemplo "útil" de su uso. Juega con las funciones y crea programas más complejos, te darás cuenta que esto (scanf/printf) no es suficiente, pero eso ya lo veremos después.
Nos leemos en el siguiente tutorial.
Comentarios
Te faltó explicar...
Si quieres que el usuario introduzca los datos separados por espacios debería hacer esto:
Deberías añadirlo a la noticia. Saludos.
si me podrian ayudar necesito
si me podrian ayudar necesito codificar este programa
dado un vector de tamaño 6, invertir los elementos de la mitad de los elemrntos
ej v=[1][2][3][4][5][6]
v(invertido)=[3][2][1][4][5][6]
si me podrian decir algo como para darme una idea se los agradeceria =D
como puedo hacer que estas operaciones se ejecute varias veces?
Si ya sabes cuántas veces
Si ya sabes cuántas veces quieres repetir todo, mete el code que tienes dentro del main() en un for
También puedes usar un while, y preguntar al user al final si quiere repetir. Algo como...
Puedes usar letras en lugar de números... es lo mismo ;)
gracias me funciono de
gracias me funciono de maravilla...
si me pudieran ayudar quiero
si me pudieran ayudar quiero hacer este programa pero no me copila nose porque gracias =D
#include <stdio.h>
#include <conio.h>
int num1=0 , num2=0;
int suma=0;
int main()
{
printf("digite numero;\n\t");
scanf("%i",&num1);
printf("digite otro numero:\n\t");
scanf("%i",&num2);
suma=num1+num2
printf("la resultado es:%i",suma);
return 0;
}
Es algo muy sencillo,
Es algo muy sencillo, olvidaste poner punto y coma al final de la línea suma=num1+num2
Cuando pidas ayuda con codes, por favor usa la herramienta para adjuntar code (primer botón de derecha a izquierda) y SIEMPRE menciona el error que te devuelve el compilador (en este caso el error salta a la vista, pero en codes más complejos ya no).
ok de acuerdo gracias...
ok de acuerdo gracias...
error en operacion
pues me salta error cuando voy a compilarlo, me marca esta linea "edad = actual - nacimiento" bueno sin tanto rollo aca dejo el codigo
de antemano gracias.
Te falta un ";" en la linea
Te falta un ";" en la linea superior
PD: La próxima vez, leéte todos los comentarios.
si es lo que hago
de todas maneras muchas gracias, no me habia percatado de ese error.
Un saludo
Duda... Hola tanos, me estoy
Duda...
Hola tanos, me estoy aprendiendo los tutos enteritos :P
Solo te quería comentar, cuando introduces por ejemplo: 14 porque luego te sale 14.00000.
¿Hay alguna forma de arreglarlo?
PD, si quieres mirate el codigo:
Resultado:
Para ver mejor, boton derecho - ver
Un saludo
Si se puede arreglar
En ves de float a;, pon int a, claro deberas areglar en la funcion scanf en ves de %f debes poner el correspondiente para int que debe ser %i y asi en el printf correspondiente a sacar por pantalla el valor de a.
Espero hayas entendido.
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects
Pues muchas gracias Guille
Pues muchas gracias Guille
Ya me sale como quiero ^^
Un saludo!
No hay de que
Estamos para ayudar ;).
no compila
pongo el codigo a ver si hay algun error...
me marca en rojo esta parte:
edad = actual - nacimiento;
gracias de antemano.
PD: estos tutos estan muy bien
Mi historia, del principio al fin
El punto y coma
Te has comido el punto y coma después de getchar... Por favor revisa tu código (la linea que marque error la anterior y la siguiente) antes de preguntar, ya que es la segunda vez que tienes problemas de terminación de instrucciones.
Salu2
"El paraíso a mi derecha, el infierno a mi izquierda y el ángel de la muerte tras de mi."
Genial
Muy buenos tutos te has hecho, pero tengo una duda?
C nos limita a ejecutar operaciones es decir; cuentas?
y otra mas: para aprender PAlib, ocupo entender C o C++?
Salu2!
Ocupas saber...
Cualquiera de los dos, siempre y cuando halla compilador para el respectivo lenguaje.
Lo mas dificil sera, aprenderte las funciones e PALib
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects
Me alegro de que sigas
con los tutoriales.
Están muy bien encaminados, y explicados.
Espero impaciente para ver como poner texto, ventanas y eso en la pantalla
Salu2!!!
https://github.com/CarlosGS/
Eso ya es otra historia
Las ventanas y todo eso que mencionas son parte de la librería de Windows. No creo que en esta serie de tutoriales explique todo eso. Únicamente enseñaré el lenguaje C, no proyectos exclusivos para Windows.
Aunque no descarto la posibilidad de hacer un tutorial sobre Windows.h.
Saludos, suerte en EEUU :)
Que bueno! Gracias por los
Que bueno! Gracias por los tutos, los sigo desde la explicación de C. Hace tiempo que quería aprender a hacer cosas así, pero todos los tutoriales que encontré hasta la fecha eran difíciles e incomprensibles :(