[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