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