Problema sencillito C

Hola, estoy haciendo unas practicas de C, y no se por qué, no consigo que este programa me transforme las vocales mayúsculas a minúsculas. Me compila perfectamente, pero al final del programa me devuelve la cadena con el mismo resultado, sin haber modificado nada!
#include <stdio.h>
#include <ctype.h>
char cadena[15];
int i;
int main(){
printf("Introduzca una cadena de maximo 15 caracteres\n");
gets(cadena);
while (cadena[i++] !='\0') {
switch (cadena[i]){
case 'A': case 'E': case 'I': case 'O': case 'U':
tolower(cadena[i]);
}
}
puts(cadena);
}

gracias!!
Creo que debes hacerlo asi:

cadena[i] = tolower(cadena[i]);

Saludos!
jomofer escribió:Creo que debes hacerlo asi:

cadena[i] = tolower(cadena[i]);

Saludos!


cierto!! Muchas gracias!!
Lo primero, deberías inciar la variable i=0, porque si no te va a traer algun problemilla.
Lo segundo, el resultado de tolower deberías de guardarlo en otra variable, por ejemplo cadena2, deberías ir copiando la cadena en cadena 2 y cuando haya una mayuscula hacer el cambio y guardarlo en cadena2.

No se si me explico [+risas]
Ya te han solucionado la duda, pero hay un par de cosas que no entiendo del todo.

1) ¿Te ha funcionado correctamente sin inicializar la variable i?
2) ¿Por qué crear i y cadena como variables globales? Aunque sea un programa sencillito acostumbrate a crearlas como locales, para reducir el acoplamiento entre módulos.
jorcoval escribió:Ya te han solucionado la duda, pero hay un par de cosas que no entiendo del todo.

1) ¿Te ha funcionado correctamente sin inicializar la variable i?
2) ¿Por qué crear i y cadena como variables globales? Aunque sea un programa sencillito acostumbrate a crearlas como locales, para reducir el acoplamiento entre módulos.


Segun el compilador y el modo, pero por lo que tengo entendido en debug normalmente te inicializan las variables a 0 (almenos el del visual studio creo que lo hace)
Muchas gracias por las respuestas!! Poco a poco me voy aclarando!
Siento ser pesado, pero ahí va otra duda:
Tengo que contar los caracteres de una cadena sin contar los espacios en blanco, y no se por qué, me da siempre un resultado del orden de 370090!
#include <stdio.h>
#include <string.h>
int main(){
int i,j,conta;
char cadena[30];
printf("Introduzca una cadena de menos de 30 caracteres\n");
gets(cadena);
i=0;
i=strlen(cadena);
for (j=0; cadena[j]!='\0'; j++){
if (cadena[j]==32){
conta=conta++;
}
}
i=i-conta;
printf("%i",i);
}


gracias!!
inicializa conta a 0 antes de meterte en el bucle
Inicializa conta a 0, no?? Creo que no lo has hecho. Sin embargo pones i=0 y luego i = strlen(cadena)
Con lo segundo ya vale, no?
jorcoval escribió:inicializa conta a 0 antes de meterte en el bucle


Siempre me despisto con las malditas inicializaciones!! Mil gracias!!

EDIT:
Tengo una nueva duda chicos, me estoy volviendo loco porque el programa siempre me devuelve 1!! he probado todo y no hay manera....
Practica 11: Calcular (e^x), mediante una serie de Taylor. Desde teclado se introducirá el valor del exponente (numero entero) y el numero de términos de la serie.
e^x=1+(x^1/1!)+(x^2/2!)+(x^3/3!)+....

#include <stdio.h>
#include <math.h>
int factorial(int x){
int resul;
resul=x;
if(x>0) {
while(x>1){
x--;
resul=x*resul;
}
}
else if (x=1) {
return(1);
}
return(resul);
}

float main(){
int i,x,n;
float resul;
resul=0;
printf("Introduzca el numero por el que quiere elevar e y el numero de terminos de la serie\n");
scanf("%i,%i", &x, &n);
for (i = 1; i == n; i++){
resul=resul+(pow(x, i)/factorial(i));
}
resul=resul+1;
printf("El resultado es %f",resul);
}




9 respuestas