Está en la página 1de 12

Usando scanf , gecth, printf, char, float, int y

string.
Usaremos dos funciones que dependern de si ests en Windows o en Linux; una es scanf(),
comn a ambos sistemas, que permite leer nmeros, y otra getch() (Windows) y getchar() (Linux)
que permite leer caracteres.

scanf
Empecemos con scanf, se utiliza de manera similar a printf, con la diferencia de que no permite
imprimir nada en pantalla, veamos un cdigo en el que declaramos una variable int y le metemos
un valor con scanf.
1
#include

2
int main()

3 {

4 int variable;

5 printf("Introduce un nmero: ");

6 scanf("%i", &variable);

printf("\nHas introducido el nmero: %i\n", variable);


7
return 0;
8
}
9

Vemos algo nuevo y es el & que hay delante de la variable en scanf. Este smbolo lo que hace es
indicar que nos referimos a la direccin de memoria de la variable y no a su valor. Recuerda que
cuando explicamos las variables, dije que al declarar una lo que hacemos es decirle al sistema que
nos reserve un hueco en la memoria, de modo que si tenemos una variable lo que tenemos es un
byte o un conjunto de bytes con el nombre de la variable en el que podemos guardar datos. Scanf
lo que pide no es la variable es la direccin de memoria en la que hay que guardar los datos. Esta
direccin podramos decir que es aleatoria, la da el sistema en el momento de declarar la variable
y depende de muchas cosas.

Si no pusiramos el &, intentara guardar el nmero que introduzcamos en la direccin de la


memoria que sea el valor de la variable, por ejemplo:

1 int variable = 5;

2 scanf("%i", variable);
Intentara introducir lo que metamos por teclado en la direccin 5 de memoria, esto puede
ocasionar problemas, podra sobreescribir una direccin en la que est cargado algo que necesita
el sistema operativo para funcionar y el ordenador podra bloquearse.

Si ejecutamos el cdigo de arriba obetenemos.

Introduce un nmero: _
Si ponemos un nmero y pulsamos enter tendremos:

Introduce un nmero: 13
Has introducido el nmero: 13
getch (SOLO WINDOWS)
Yo uso Linux, as que quiz alguno de los cdigos est mal, ya que no los pruebo (en realidad
prueba slo algunos).

getch nos permite guardar una letra en una variable, tiene otra funcin llamada getche, que hace
lo mismo solo que esta ltima muestra la letra en pantalla mientras que la otra no lo hace, la e del
final es de echo o eco.
Veamos un ejemplo:

1
#include

2
int main()

3 {

4 char letra;

5 printf("Introduce una letra: ");

6 letra = getch();

printf("\nHas introducido la letra: %c\n", letra);


7
return 0;
8
}
9

Vemos que aqu debemos igualar la variable char a la funcin, ya que la funcin da como salida la
letra. Si ejecutamos obtenemos.

Introduce una letra: a


Has introducido la letra: a
getchar() (Linux)
El uso es el mismo que con getch(), solo que en Linux, el ejemplo es el mismo. (copy&paste):
1
#include

2
int main()

3 {

4 char letra;

5 printf("Introduce una letra: ");

6 letra = getchar();

printf("\nHas introducido la letra: %c\n", letra);


7
return 0;
8
}
9

Si ejecutamos obtenemos.

Introduce una letra: a


Has introducido la letra: a

El indicador de tipo de dato (cdigo de formato o cadena de control) hace explcito el tipo de dato que se espera recibir en la
entrada. Se usan los mismos cdigos para mostrar datos en pantalla con printf. Los indicadores de tipos principales son los
siguientes:
Cdigo de formato Significado
%d Tipo entero (int)
%ld Tipo entero largo (long)
%lf Tipo decimal doble precisin (double)
%c Tipo carcter
%s Tipo cadena alfanumrica (array de caracteres)

El indicador de tipo de dato (cdigo de formato o cadena de control) hace explcito el tipo de dato que se espera recibir en la
entrada. Se usan los mismos cdigos para mostrar datos en pantalla con printf. Los indicadores de tipos principales son los
siguientes:

Cdigo de formato Significado


%d Tipo entero (int)
%ld Tipo entero largo (long)
%lf Tipo decimal doble precisin (double)
%c Tipo carcter
%s Tipo cadena alfanumrica (array de caracteres)

Existen ms cdigos de formato (por ejemplo %e, %f %g para tipo float) y es posible introducir modificadores para especificar
precisin decimal o longitud de los datos, pero con estos cdigos bsicos nos resultar suficiente para las construcciones ms
habituales en programas.

Un ejemplo bsico de uso de esta sentencia lo vemos a continuacin. Ejecuta este cdigo y comprueba el resultado:

#include <stdio.h>
#include <stdlib.h>
// Ejemplo aprenderaprogramar.com
int main() {
int valorUsuario;
printf("Introduzca un numero entero: ");
scanf("%d", &valorUsuario);
printf("Gracias");
return 0;
}

Un aspecto que puede resultar curioso es que si bien C no incluye el tipo predeterminado de dato cadena alfanumrica (String), s
aporta herramientas para un tratamiento ms cmodo de cadenas de caracteres, como el cdigo de formato %s.

scanf es una instruccin que se usa comnmente junto a printf como veremos en ejemplos de cdigo.
EJERCICIO

Dado el siguiente cdigo:

#include <stdio.h>
#include <stdlib.h>
// Ejercicio aprenderaprogramar.com
int main() {
int valorUsuario;
printf("Introduzca su peso en kg como valor numerico: ");
scanf("%s", &valorPeso);
printf("Gracias");
return 0;
}

En el lenguaje C el ingreso de datos por teclado se hace mediante la funcin scanf()


scanf() es una funcin que lee datos ingresados por teclado y se los asigna a una variable indicada. Esta funcin tambin
maneja caracteres de sustitucin como lo haceprintf(), con el fin de especificar los datos que se estn leyendo.
Modo de uso:

scanf("%d",&variableEntera);
scanf("%c",&variableCaracter);
scanf("%f",&variableReal);

Veamos un ejemplo:

#include <stdio.h>
void main()
{
int numero; //Declarando variable entera
printf("Ingrese un numero: "); //Solicitando al usuario que ingrese un numero
scanf("%d"&numero); //Leyendo el nmero solicitado
printf("El numero que ingreso es %d", numero); //Mostrando el nmero ingresado por teclado
}
En esta funcin aparece un "nuevo componente" del lenguaje c, el operador "&", llamado
operador de direccin.
Este operador devuelve la direccin de memoria en la que se alojan los datos de una variable,
la funcin scanf() usa esta direccin para insertar directamente en este espacio de memoria los
datos leidos desde el teclado.

Veamos algunos ejemplos de la apliacin de la funcin scanf():

1. Escriba un programa que solicite por teclado la longitud del radio de un crculo y que
muestre por pantalla el rea y permetro del mismo.
Solucin:
#include <stdio.h>
#define PI 3.14
void main()
{

//Declaracin de variables
float radio, perimetro, area;
printf("Ingrese el valor del radio del circulo: ");
scanf("%f",&radio); //leyendo datos desde el teclado
perimetro = 2*PI*radio; //Calculando el permetro del crculo
area = PI*r*r; //Calculando el rea del crculo
//Mostrando en pantalla los resultados
printf("El area del circulo es : %.2f\n",area);
printf("El perimetro del circulo es: %.2f",perimetro);
}

2. Escriba un programa que solicite por teclado las longitudes de la base y altura de un
rectngulo y que muestre por pantalla el rea y permetro del mismo.
Solucin:

#include <stdio.h>
void main()
{
//Declaracin de variables
float base, altura, perimetro, area;
printf("Ingrese el valor de la base del rectangulo: ");
scanf("%f",&radio); //leyendo datos desde el teclado
printf("Ingrese el valor de la altura del rectangulo: ");
scanf("%f",&radio); //leyendo datos desde el teclado
perimetro = 2*base + 2*altura; //Calculando el permetro del rectngulo
area = base*altura; //Calculando el rea del rectngulo
//Mostrando en pantalla los resultados
printf("El area del rectangulo es : %.2f\n",area);
printf("El perimetro del rectangulo es: %.2f",perimetro);
}
1. Organigrama de las fases para hacer un programa
INICIO
NUM1
NUM 2
NO
NUM1>NUM2 MAYOR=NUM2
MAYOR=NUM3
FIN
2. tipos de variables o argumentos
Int nmeros enteros, desde -37.768 hasta 37.767
Float nmeros decimales, cuyo separador es .
Char caracteres
2.1 modificacin del tipo
Long entero largo, desde --2.147.438.648 hasta 2.147.438.687
UNSIGNED entero sin signo, desde hasta 65.535
3. FORMATOS
printf (cadena de formato,[lista de argumentos]);
scanf (formato,argumento);
4. especificacin de formatos
%d enteros con signos
%u enteros sin signos
%ld enteros largos con signos
%lu enteros largos sin signos
%f flotantes (decimales)
%c character (letras)
5. cadenas de escape
\n salto de lnea
\t siguiente parada del tabulador
\a aviso sonoro
\ muestra el caracter ()
\' muestra el caracter (')
\\ muestra el caracter (\)
\b retrocede el cursor 1 espacio
6. elementos de un programa
#include(stdio.h) fichero de cabecera
Void main( ) indica el inicio del programa
{ indica el principio de las instrucciones
Printf visualizar en pantalla
Scanf leer
} indica el final de las instrucciones
7. operadores aritmticos
+ suma
-- resta
* multiplicacin
/ divisin
% resto
8. operadores relacionales
> < mayor que / menor que
>= mayor o igual que
<= menor o igual que
== igual que
!= diferente de
9. operadores lgicos
no (!) negacin
y (&&) AND lgico (da verdadero si todo es verdadero)
o (||) OR lgico (da falso si todo es falso)
9.1 prioridad
1 !
2 &&
3 ||
10. caracteres acentuados
Alt + 160 =
Alt + 130 =
Alt + 161 =
Alt + 162 =
Alt + 163 =
11. instruccin condicional
If (condicin) ojo! ( Parntesis y sin ; )
{
instrucciones;
}
else
{
instrucciones;
}
12. estructuras repetitivas
12.1 while
While (condicin) se evala la condicin, y si se cumple
{ se ejecutan las instrucciones.
instrucciones;
} dentro hay que actualizar la . variable que determina la condicin.
12.2 do while
Do
{
instrucciones;
While (condicin) ; ojo!
}
13. INSTRUCCIN FOR
for(inicio_variable;condicin;incremento_variable)
{
Sentencia 1;
.
.
.
}
14. GETCH ( )
Detiene la ejecucin del programa hasta que se pulse una tecla (conio.h).
15. GETCHE ( )
Detiene la ejecucin del programa hasta que se pulse una tecla, y visualiza el caracter (conio.h).
16. CLRSCR ( )
Limpia la pantalla.
17. SIMBOLOGA
++ INCREMENTO 1 i=i+1 i++
-- DECREMENTO 1 i=i-1 i
+=
-= ASIGNACIN
/= COMPLEJA
%=
SUMA SUMA+NUM Primero se suma y luego se asigna.
Ejercicios resueltos de programacin
visualizar el valor de la diferencia entre 2 nmeros introducidos por teclado. (El primero debe ser mayor que el
segundo).
#include<stdio.h>
void main( )
{
int num1, num2, diferencia;
printf(INTRODUZCA UN NMERO: );
scanf/%d,&num1);
printf(INTRODUZCA OTRO NMERO: );
scanf(%d,&num2);
diferencia=num1-num2;
printf(EL RESULTADO ES: %d,diferencia);
}
visualizar la suma de cuatro (4) nmeros enteros introducidos por teclado.
#include<stdio.h>
void main( )
{
int num1, num2, num3, num4;
printf(INTRODUZCA UN PRIMER NMERO ENTERO: );
scanf(%d,&num1);
printf(INTRODUZCA UN SEGUNDO NMERO ENTERO: );
scanf(%d,&num2);
printf(INTRODUZCA UN TERCER NMERO ENTERO: );
scanf(%d,&num3);
printf(INTRODUZCA UN CUARTO NMERO ENTERO: );
scanf(%d,&num4);
printf(EL RESULTADO ES: %d,num1=num1+num2+num3+num4);
}
modificar el valor de un primer nmero entero introducido por teclado, con la suma de un segundo nmero entero
tambin introducido por teclado. Visualizar el resultado final.
#include<stdio.h>
void main( )
{
int num1, num2;
printf(INTRODUZCA UN NMERO ENTERO: );
scanf(%d,&num1);
printf(INTRODUZCA OTRO NMERO ENTERO: );
scanf(%d,&num2);
num1=num1+num2:
printf(EL RESULTADO ES: %d,num1);
}
calcular y visualizar el valor del cubo de un nmero entero introducido por teclado.
#include<stdio.h>
void main( )
{
int num1;
printf(INTRODUZCA UN NMERO ENTERO: );
scanf(%d,&num1);
printf(SU CUBO ES: %d,num1*num1*num1);
}
COMPARA DOS (2) ENTEROS INTRODUCIDOS POR TECLADOY VISUALIZA SI EL PRIMER NMERO ES
MAYOR QUE EL SEGUNDO O NO.
#include<stdio.h>
void main( )
{
int num1,num2;
printf(INTRODUZCA UN NMERO ENTERO: );
scanf(%d,&num1);
printf(INTRODUZCA OTRO NMERO ENTERO: );
scanf(%d,&num2);
if(num1>num2)
printf(EL PRIMER NMERO ES MAYOR QUE EL SEGUNDO);
else
printf(EL SEGUNDO NMERO ES MAYOR QUE EL PRIMERO);
}
LEE TRES (3) NMEROS ENTEROS INTRODUCIDOS POR TECLADO Y VISUALIZA SI EL PRIMERO ES
MAYOR QUE EL SEGUNDO Y MAYOR QUE EL TERCERO, O SI NO LO ES.
#include<stdio.h>
void main( )
{
int num1, num2, num3;
printf(INTRODUZCA UN PRIMER NMERO ENTERO: );
scanf(%d,&num1);
printf(INTRODUZCA UN SEGUNDO NMERO ENTERO: );
scanf(%d,&num2);
printf(INTRODUZCA UN TERCER NMERO ENTERO: );
scanf(%D,&num3);
if((num1>num2)&&(num1>num3))
printf(EL PRIMER ENTERO ES MAYOR QUE LOS OTROS DOS);
else
printf(EL PRIMER NMERO NO ES MAYOR QUE LOS OTROS DOS);
}

Ejercicio de lenguaje C Configuracin del reloj.

Escribir en lenguaje C un programa que:

1) Pida por teclado una hora en tres variables: horas, minutos y segundos (datos enteros).

2) Muestre por pantalla la hora un segundo despus.

Nota 1: Si la hora introducida por el usuario es incorrecta, se debe mostrar el mensaje:


"ERROR: La hora es incorrecta.".

Nota 2: Para que una hora sea vlida, se tiene que cumplir que:

Las horas deben ser mayor o igual que 0 y menor o igual que 23.

Los minutos deben ser mayor o igual que 0 y menor o igual que 59.

Los segundos deben ser mayor o igual que 0 y menor o igual que 59.

En pantalla se ver, por ejemplo:

Si se introduce una hora incorrecta, en pantalla se ver, por ejemplo:


Solucin: anidando varias instrucciones if
/* Programa: La hora un segundo despus */
#include <conio.h>
#include <stdio.h>
int main()
{
int h, m, s;
printf( "\n Introduzca horas: " );
scanf( "%d", &h );
printf( "\n Introduzca minutos: " );
scanf( "%d", &m );
printf( "\n Introduzca segundos: " );
scanf( "%d", &s );
if ( h >= 0 && h <= 23 && m >= 0 && m <= 59 && s >= 0 && s <= 59 )
{
s++;
if ( s == 60 )
{
s = 0;
m++;
if ( m == 60 )
{
m = 0;
h++;
if ( h == 24 )
h = 0;
}
}
printf( "\n Un segundo despu%cs la hora es: %d:%d:%d", 130, h,
m, s );
}
else
printf( "\n ERROR: La hora es incorrecta." );
getch(); /* Pausa */
return 0;
}
El operador incremento (++) se ha utilizado para, cuando corresponda, incrementar en
una unidad el valor de las variables h, m y s. De forma que, por ejemplo s++ es lo mismo
que escribir s = s + 1.

Por otra parte, obsrvese que, algunos caracteres abrir y cerrar llave ({}) se han podido
omitir, pero otros no.

También podría gustarte