Autor
|
Tema: [DUDA] Contador de vocales. Medio-Solucionado xD (Leído 9,305 veces)
|
pitka
Desconectado
Mensajes: 25
|
Buenas, llevo un tiempo leyendo el foro, y me parece espectacular y decidi registrarme ya que veo que tienen la disposicion de ayudar a personas que no saben como yo, de antemano gracias! Entrando al tema mi duda es la siguiente, estoy aprendiendo c/c++, he estado tratando de hacer un programa que cuente las vocales de un texto ingresado por teclado lo cual he logrado, pero no puedo hacer que finalice el texto al introducir uncaracter especifico (ejemplo un "@" o ".") para finalizar sin tener que darle enter, ademas de que tambien me gustaria usar un ciclo para repetir todo mientras el usuario quiera, pero se me embasuran las variables y ni idea de como limpiarlas de nuevo, estuve leyendo aqui en busca de una funcion llama fflush, pero segun lei no es lo que necesito http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
lo que lei en ese enlace me ayudo, porque me habian dicho que necesitaba usar "gets", buen esa es mi duda ya me extendi, mucho esto es lo que llevo de codigo por cierto me ayude con unos codigos que encontre en internet pero ninguno me dijo lo que necesitaba por eso me anime a preguntar despues de que busque modificacion he conseguido hacer un ciclo, y solucione lo del "embasuramiento del buffer" aunque aun no tengo muy claros los conceptos, lo arregle usando esto.. que encontre en muchas partes #define BORRA_BUFFER while( getchar() != '\n'); y luego agregue BORRA_BUFFER al final del ciclo antes de evaluar la condicion, y se soluciona, pero me surgio una duda con respecto a esa macros.. y es que hace exactamente?? gracias..
|
|
« Última modificación: 30 Noviembre 2010, 12:25 pm por Novlucker »
|
En línea
|
|
|
|
Leber
Desconectado
Mensajes: 338
"Fracta, non verba"
|
Para repetir cuando el usuario quiera, tendras que hacer un bucle, con un do-while te bastaria. Comparas su entrada com por ejemplo un exit. do { }while(strcmp(cadena_usuario, "exit") != 0)
|
|
|
En línea
|
"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
|
|
|
pitka
Desconectado
Mensajes: 25
|
Para repetir cuando el usuario quiera, tendras que hacer un bucle, con un do-while te bastaria. Comparas su entrada com por ejemplo un exit. do { }while(strcmp(cadena_usuario, "exit") != 0)
Lo hice asi, y agregue esa funcion que encontre para borrar el buffer pero me gustaria saber exactamente como lo hace. y tambien quisiera saber como terminar el texto al presionar una tecla.. supongamos que luego de que comienzo a escribir cuando el programa lo pide "era un dia muy... @" y que el programa despues de que introduzca @ me diga las vocales son tales y tales blablabla.. sin necesidad de presionar enter si me explico? gracias de antemano
|
|
« Última modificación: 30 Noviembre 2010, 02:50 am por pitka »
|
En línea
|
|
|
|
Beakman
|
Para hacer lo de las teclas tenes que usar alguna librería. Como ncurses. Aca hay un ejemplo para reconocer una tecla. En windows tambien se puede hacer con la conio.
|
|
« Última modificación: 30 Noviembre 2010, 19:50 pm por qily »
|
En línea
|
|
|
|
pitka
Desconectado
Mensajes: 25
|
Dejo el codigo terminado, aunque como dije, falta la parte de hacer que deje de leer el codigo al presionar una tecla determinada. Cualquier aclaracion que me quieran hacer respecto al code pues seran muy bien recibidas..!todo sea por aprender #include <stdio.h> #include <string.h> #define BORRA_BUFFER while( getchar() != '\n'); int main() { char texto[100]; int vocales[5]; int i, total=0; char resp; do { for(i=0; i<5; i++) vocales[i] = 0; printf("Introduce el texto: "); fgets(texto , 100, stdin ); for(i=0; i<strlen(texto); i++) { vocales[0]++; vocales[1]++; vocales[2]++; vocales[3]++; vocales[4]++; } // Calcula el total de vocales for(i=0; i<5; i++) total += vocales[i]; if(total==0) { } else { printf("\n____________________"); printf("\nCantidad de vocales: %d\n\n", total ); printf("A --> %d\n", vocales [0]); printf("E --> %d\n", vocales [1]); printf("I --> %d\n", vocales [2]); printf("O --> %d\n", vocales [3]); printf("U --> %d\n", vocales [4]); } BORRA_BUFFER return 0; }
|
|
|
En línea
|
|
|
|
xassiz~
|
Para qué ese define? xD
|
|
|
En línea
|
|
|
|
pitka
Desconectado
Mensajes: 25
|
Para qué ese define? xD
Ni idea =X, aunque creo que limpia el buffer del teclado antes de que vuelva a dar otra vuelta, antes de que lo tuviera no funcionaba y despues que lo coloque se arreglo, es una duda que tengo planteada seria fabuloso si alguien me dijera exactamente que hace..!! aunque sirva
|
|
« Última modificación: 2 Diciembre 2010, 00:39 am por pitka »
|
En línea
|
|
|
|
Akai
Desconectado
Mensajes: 823
|
lo que hace es ir cogiendo caracteres del buffer hasta que se encuentra un \n, o salto de linea.
Pongamos que tu quieres leer sólo un carácter --> 'a'. Pero al ponerlo en la consola y darle al teclado, en realidad se pasa como "a\n" por el enter que presionas al poner el dato. En este caso, limpiaría el '\n' que queda en el buffer.
Otro caso sería por ejemplo que quieras leer sólo un carácter y te pongan algo tipo "blablablabla". Tu programa leería 'b' y luego te quedaría en el buffer "lablablabla\n". Mismo procedimiento que antes, y se traga hasta el '\n'.
El tema de hacerlo por macro... bueno, ¿vagancia? Es lo mismo que si te declaras una función (esto tendría un ligero aumento del coste) o pones while(getchar()!='\n'); cuando quieras limpiar el buffer que es lo que hace la macro.
|
|
|
En línea
|
|
|
|
xassiz~
|
No no, a lo que me refiero es que no es rentable poner un DEFINE para utilizarlo solo una vez además, que te cuesta poner el while directamente? xD Sería mas legible
|
|
|
En línea
|
|
|
|
EddyC
Desconectado
Mensajes: 4
|
Que tal , te doy una variante usando punteros a cadena q es mucho mas corta , te devuelve la cantidad de vocales en el texto , lo que pusiste de la "@" no lo entendi bien , si te referis a que termine de buscar vocales cuando encuentra una es muy simple y si lo necesitas te muestro como seria la modificacion , saludos . #include <stdio.h> #include <conio.h>
int contar_vocales(char *);
void main() {char cad[500]; printf("Ingrese el texto a contar vocales : "); gets(cad); printf("La cantidad de Vocales en el texto es %d",contar_vocales(cad)); getch(); }
int contar_vocales(char *cad) {int cont=0; char *aux=cad; //creas un puntero auxiliar con la direccion del comienzo de cad while(*aux) // entra mientras el contenido de la cadena != de '\0' {if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u') // podes agregar mayus cont++; aux++; } return cont;
}
|
|
« Última modificación: 4 Diciembre 2010, 18:20 pm por EddyC »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
contador de personas por medio infrarrojo
Electrónica
|
sebastianduque
|
1
|
8,450
|
7 Octubre 2008, 00:04 am
por skapunky
|
|
|
Hacer un contador de error con bat [SOLUCIONADO]
Scripting
|
Meta
|
3
|
9,732
|
4 Junio 2009, 05:02 am
por leogtz
|
|
|
contador de renglones [solucionado]
Scripting
|
flony
|
2
|
4,294
|
7 Mayo 2010, 23:08 pm
por flony
|
|
|
Programa con acciones: contador de vocales y consonantes
Programación C/C++
|
street_21
|
3
|
33,458
|
16 Enero 2012, 14:42 pm
por rir3760
|
|
|
Ingresar una oracion, toma cada palabra y contar sus vocales(Solucionado)
.NET (C#, VB.NET, ASP)
|
01munrra
|
2
|
3,363
|
30 Septiembre 2015, 03:46 am
por 01munrra
|
|