Buenas noches.
Tengo un código el cual deberá pedir al usuario que introduzca una frase y el programa le muestre: el tamaño de la cadena y el numero de veces que se repitieron las vocales en la frase.
Al compilar no hace la función del conteo de las vocales.
Agradeceria mucho si me pudieran ayudar a hacer que trabaje correctamente.
:)
#include <conio.h>
#include <stdio.h>
int main ()
{
char frase[30];
int c;
int vocal_a=0, vocal_e=0, vocal_i=0, vocal_o=0, vocal_u=0; /*variables para almacenar los contadores de cada vocal [color=black][color=orange][color=limegreen][color=maroon][color=purple][/color][/color][/color][/color][/color]*/
printf ("Ingresa una frase: ");
scanf ("%d", &frase[30], '\n');
for (int c=0; c<30; c++)
{
switch (frase [c])
{
case 'a': vocal_a++; break;
case 'e': vocal_e++; break;
case 'i': vocal_i++; break;
case 'o': vocal_o++; break;
case 'u': vocal_u++; break;
}
}
printf ("\nVocal_a: %d", vocal_a);
printf ("\nVocal_e: %d", vocal_e);
printf ("\nVocal_i: %d", vocal_i);
printf ("\nVocal_o: %d", vocal_o);
printf ("\nVocal_u: %d", vocal_u);
getch ();
return 0;
}
Eso no funciona primero porque en la función <scanf()> estás usando %d que es para variables de tipo entero (int) y además estás intentando guardar en la posición 30 del array <frase>. Esa posición no es accesible ya que si el tamaño es 30, las posiciones van de 0 a 29.
Para guardar cadenas es mejor que uses la función <fgets()>.
#include <stdio.h>
#define MAX_SIZE 30 // constante para determinar la longitud maxima de la cadena
int main(){
char frase[MAX_SIZE];
printf("Introduce una frase: ");
fgets(frase, MAX_SIZE, stdin);
// el resto del programa
getchar();
return 0;
}
El resto del programa está bien pero como recomendaciones te diría que no uses la librería <conio.h> (que sirve para la función <getch()>) porque no es estándar. Usa mejor la función <getchar()> que pertenece a la librería <stdio.h> y así sólo necesitas esa librería.
Y en el <switch> puedes hacer que cuente también las mayúsculas:
for(size_t i = 0; i < MAX_SIZE; ++i){
switch(frase[i]){
case 'a': case 'A': ++vocal_a; break;
case 'e': case 'E': ++vocal_e; break;
//...
}
}
Agradezco mucho su ayuda