[C con Clase] Lo + básico
BETTINA CANTERO
betabetti en hotmail.com
Lun Mar 30 19:18:17 CEST 2009
A fuerza de consultar a varias personas, he podido resolver este código, compila de lo más bien.
Aclaro que estoy trabajando con el Borland Turbo C++ 3.0 (que recien lo estoy conociendo)... El código quedó así:
#include<conio.h>
#include<stdio.h>
void main()
{
int cont=0;
int i;
int n;
char car;
clrscr();
printf("Ingrese la cantidad de caracteres a leer \n");
scanf("%i",&n);
for(i=1;i<=n;i++)
{
printf("ingrese un caracter \n");
fflush(stdin);
scanf("%c",&car);
printf("el caracter ingresado es: %c\n",car);
if(car=='a')
{
cont++;
};
};
printf("la cantidad de 'a' encontradas es de: %i \n",cont);
getch();
}
Muchas Gracias por su ayuda.
Me queda mucho por conocer todavía. Seguiré practicando.
> Date: Mon, 30 Mar 2009 12:02:25 -0400
> From: srd4121 en njit.edu
> To: cconclase en listas.conclase.net
> Subject: Re: [C con Clase] Lo + básico
>
> Hola Bettina,
>
> BETTINA CANTERO wrote:
> > Buenas necesito ayuda con este pequeño código. Estoy comenzando mi
> > estudio en esto de la programación, y estoy estancada en esto. La
> > idea es cargar un número determinado de caracteres a leer y luego
> > contar cuántas "a" se cargaron. Mi problema es que la iteración del
> > código no anda bien, y el contador me muestra un resultado de cuatro
> > dígitos cuando he cargado solo 5 iteraciones para hacer. Sé que es
> > muy básico pero no puedo continuar con otra práctica sino puedo
> > resolver esta que creo es muy sencilla pero no sé cuál es mi error.
> > Este es el código:
>
> Veamos el código fuente.
>
> > #include<conio.h>
> > #include<stdio.h>
> > void main()
> > {
> > int i,n,cont;
>
> Aquí tienes parte del error que tienes. Declaras 'cont', pero no la
> inicializas. Por lo tanto, 'cont' contiene arbitrariamente un número
> cualquiera; solemos decir que contiene "basura". Al usar 'cont', estás
> operando con "basura" y por consiguiente obtendrás "basura".
>
> La solución, en tu caso, es inicializar 'cont' a 0 (cero).
>
> > char car;
> > clrscr();
> > printf("Ingrese la cantidad de caracteres a leer \n");
> > scanf("%i",&n);
> > /*car=getch();*/
> > for(i=0;i<=n;i++)
>
> Esto implica que realizarás n+1 iteraciones. Sospecho que esto es un
> error, pero quizá te interese iterar tantas veces.
>
> > {
> > car=getch();
> > printf("ingrese un caracter \n");
> > scanf("%c",&car);
>
> No entiendo por qué tienes dos lecturas por iteración. Supongo que
> querías "arreglar" los problemas que te estaba dando este programa.
>
> El problema es que 'getch()' no busca en el canal o "búfer" del teclado,
> sino directamente al teclado desde la BIOS, mientras que 'scanf()' sí
> lee desde el canal, el cual almacena los caracteres introducidos.
>
> > printf("el caracter ingresado es: %c\n",car);
> > /*car=getch();*/
> > if(car=='a')
> > {
> > cont++;
> > /*car=getch();*/
> > };
> > };
> > printf("la cantidad de 'a' encontradas es de: %i \n",cont);
> > getch();
> > }
> >
>
> En cuanto al comportamiento problemático de permitir introducir
> caracteres algunas alternándose, esto radica en que el canal de entrada
> (el teclado) contiene los caracteres introducidos. En el primer caso del
> ejemplo que nos diste, escribes: 5, pero el canal del búfer realmente
> contiene lo siguiente: "5\n", ya que pulsaste [ENTER]. Al leer el primer
> número, se extrae '5', pero deja '\n'. Por lo tanto, al llegar a la
> siguiente lectura, el programa simplemente lee y extrae el carácter '\n'
> que está en el canal de entrada, sin preguntar.
>
> Las lecturas del canal de entrada sólo piden datos si el canal está
> vacía; si no lo está, entonces lee y extrae caracteres del canal. Esto
> es lo que está ocurriendo en tu programa. Pide leer un carácter, pero
> para la segunda lectura, ya tiene un '\n' a leer, y por tanto no pide
> leerlo.
>
> Una solución es leer el carácter que quieres con 'scanf()' y luego
> extraer el carácter '\n' del canal de entrada para preparar este canal
> para la siguiente iteración. Por ejemplo,
>
> for(...)
> {
> scanf( "%c", &car );
> getchar(); /* para extraer '\n' */
> ...
> }
>
> Otra solución es leer todos los caracteres de golpe en una cadena de
> caracteres, si el usuario los introduce como una cadena. Por ejemplo,
>
> char caracteres[1024]; /* máximo de 1024 */
> ...
> scanf( "%s", caracteres );
>
> Ahora puedes aplicar cualesquier criterios que quieras a la cadena.
>
>
> Espero haber aclarado las dudas.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
_________________________________________________________________
¿Querés saber cómo va a estar el clima mañana? Ingresá ahora a MSN
http://tiempo.ar.msn.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090330/39429762/attachment.html>
Más información sobre la lista de distribución Cconclase