Para reconocer caracteres especiales, podemos utilizar el código ascii generado por cada letra. Esto es, reconcer el número que representa a cada caracter. He aquí un programa que busca acentos en la "i" utilizando una conversión forzada de cada elemento del arreglo y comparándolo con el valor de la i acentuada.
#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
char entrada[100];
int largo=0,i=0,test=0;
printf("ingresa los datos requeridos \n");
scanf("%[^'0-9']",entrada);
largo= strlen(entrada);
printf("\n lo que usted ingreso es: ");
printf("\n%s y el largo es:
%d\n",entrada, largo);
for(i=0;i<largo;i++)
{
test=(int)entrada[i]; //conversión a entero
if(test==-115) //el -115 representa a la i acentuada en forma grave, " ì "
printf("\n acento en la i encontrado en la pos=%d\n",i+1);
}
system("pause");
}
Para conocer los valores de cada caracter, basta con imprimirlos previa conversión forzada, por ejemplo, utilizando el mismo for que vemos en el programa anterior y luego, imprimr "test" por cada letra.
viernes, 8 de agosto de 2008
¿Cómo leer desde teclado e incluir los espacios?
En este post, quisiera compartir una forma (deben existir varias) para, a través del formato que se le da al scanf, poder leer todo lo escrito, hasta algún caracter en especial. En general, estamos acostumbrados a formatear con respecto al tipo de dato a leer, esto es, "%d" para enteros, "%f" para punto flotante, "%l" para long, etc.. Aquí usaremos algo parecido, solo que en vez de que sea algo directo a través de una letra, será con una condición... o sea, leerá "todo hasta un caracter" o "solo ciertos caracteres".
Leyendo hasta encontrar un numero
#include<stdio.h>
#include<windows.h>
int main()
{
char entrada[100];
printf("ingresa los datos requeridos\n");
scanf("%[^'0-9']",entrada);
printf("\n lo que usted
ingresó es: ");
printf("\n%s\n",entrada);
system("pause");
return 0;
}
En el código anterior leemos todo hasta encontrar un número. El "secreto" está en el formato que le damos al scanf. Si nos fijamos bien, en la instrucción: scanf("%[^'0-9']",entrada) podemos traducirla de esta forma:
% ; indica el comienzo de una conversión de datos
[; indica el comienzo de un rango de datos
^ : el símbolo circunflejo, actua como un "not lógico", o sea dice: no leas...
'0-9': aquí tenemos el rango en sí, o sea, desde 0 a 9.
Ojo que estos son caracteres, por eso utilizamos un arreglo de tipo char, o sea, un string.
Ejemplo de entrada-salida:
ingresa los datos requeridos
hola que tal festival2
usted ingreso
hola que tal festival
Ahora bien para el programa anterior usamos DEV-C++ por eso la librería windows.h y el system("pause").
Leyendo hasta encontrar un numero
#include<stdio.h>
#include<windows.h>
int main()
{
char entrada[100];
printf("ingresa los datos requeridos\n");
scanf("%[^'0-9']",entrada);
printf("\n lo que usted
ingresó es: ");
printf("\n%s\n",entrada);
system("pause");
return 0;
}
En el código anterior leemos todo hasta encontrar un número. El "secreto" está en el formato que le damos al scanf. Si nos fijamos bien, en la instrucción: scanf("%[^'0-9']",entrada) podemos traducirla de esta forma:
% ; indica el comienzo de una conversión de datos
[; indica el comienzo de un rango de datos
^ : el símbolo circunflejo, actua como un "not lógico", o sea dice: no leas...
'0-9': aquí tenemos el rango en sí, o sea, desde 0 a 9.
Ojo que estos son caracteres, por eso utilizamos un arreglo de tipo char, o sea, un string.
Ejemplo de entrada-salida:
ingresa los datos requeridos
hola que tal festival2
usted ingreso
hola que tal festival
Ahora bien para el programa anterior usamos DEV-C++ por eso la librería windows.h y el system("pause").
Suscribirse a:
Entradas (Atom)