Ejercicio 06 — Contar vocales (a e i o u, mayusculas y minusculas) en una cadena…
Dificultad: amarillo · Módulo 05 (Arrays y cadenas)
Enunciado
Contar vocales (a e i o u, mayusculas y minusculas) en una cadena leida con fgets.
Diagrama de flujo

Cómo se resuelve
Aquí trabajamos con una cadena, que en C no es más que un array de char terminado en el carácter especial '\0' (el byte cero). Ese '\0' marca el final del texto útil.
- Leemos con
fgets(s, sizeof(s), stdin). Usamosfgetsy nogetsporquefgetsrespeta el tamaño del buffer (sizeof(s)= 200) y nunca escribe más allá del array, evitando el desbordamiento clásico. Como efecto,fgetscoloca automáticamente el'\0'al final de lo leído. - Recorremos la cadena con un bucle cuya condición es
s[i] != '\0'. Esta es la idea clave de las cadenas en C: no recorres “hasta una longitud”, sino hasta el terminador nulo. Cuando el bucle llega a'\0', para solo. - Dentro comparamos cada carácter con las diez vocales (minúsculas y mayúsculas) usando
||, y si coincide sumamos uno al contador.
Trampa habitual: olvidar que las mayúsculas son caracteres distintos de las minúsculas ('a' y 'A' no son iguales para el ordenador), por eso hay que comprobar ambas. Y si recorrieras con un número fijo de vueltas en vez de parar en '\0', contarías basura de la memoria sobrante del array.
Para practicar — cópialo en Dev-C++
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
* Curso de C — Modulo 05: Arrays y cadenas
* Ejercicio 06 — PRACTICA (rellena los TODO)
* Enunciado: Contar vocales (a e i o u, mayusculas y minusculas) en una
* cadena leida con fgets.
* Dificultad: amarillo
* Compilar: gcc -std=c11 -Wall ej06_practica.c -o ej06 && ./ej06
*/
#include <stdio.h>
int main(void) {
char s[200];
// TODO 1: Usa fgets para leer una cadena de hasta 199 caracteres.
// Sintaxis: fgets(s, sizeof(s), stdin);
// TODO 2: Declara un contador de vocales inicializado a 0.
// TODO 3: Recorre la cadena con un for cuya condicion sea s[i] != '\0'.
// En cada iteracion, comprueba si s[i] es una vocal
// (a, e, i, o, u en minuscula O en mayuscula) e incrementa el contador.
// TODO 4: Imprime el numero de vocales.
return 0;
}Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 05: Arrays y cadenas
* Ejercicio 06 — MODELO (resuelto)
* Enunciado: Contar vocales (a e i o u, mayusculas y minusculas) en una
* cadena leida con fgets.
* Dificultad: amarillo
* Compilar: gcc -std=c11 -Wall ej06_modelo.c -o ej06 && ./ej06
*/
#include <stdio.h>
int main(void) {
char s[200];
printf("Introduce una cadena: ");
fgets(s, sizeof(s), stdin); // lee hasta 199 chars + '\0'; incluye '\n'
int vocales = 0;
// Recorremos la cadena hasta encontrar '\0'
for (int i = 0; s[i] != '\0'; i++) {
char c = s[i];
// Comprobamos cada vocal en mayuscula y minuscula
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') {
vocales++;
}
}
printf("Vocales: %d\n", vocales);
return 0;
}Cómo usarlo
Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.