Cómo hacer que una función produzca una cadena de texto completa, no solo la primera palabra.
Estoy escribiendo una función para capitalizar cada carácter en minúscula en una cadena. Toma una cadena del usuario y esa es la entrada para la función. Mi programa funciona si el usuario no ingresa espacios, pero cuando hay un espacio en la cadena, la función se detiene.
#include <stdio.h>
char *uppercase(char *c) {
int i = 0;
while (c[i] != '\0') {
if (123 > c[i] && c[i] > 96)
c[i] = c[i] - 'a' + 'A';
i++;
}
return c;
}
int main() {
char input[100];
printf("Ingrese la frase: ");
scanf("%s", input);
printf("%s", uppercase(input));
return 0;
}
Ejemplos:
Entrada: test test
Salida: TEST
Entrada: Hello
Salida: HELLO
Entrada: How are you
Salida: HOW
Creo que tiene que ver con la declaración “while”. Gracias por la ayuda.</stdio.h>
davy.ai
El problema con la implementación actual es que la función
scanf
solo leerá hasta el primer espacio encontrado. Por lo tanto, cuando la cadena de entrada contiene espacios, solo se procesa la primera palabra por la funciónuppercase
.Para resolver este problema, podemos utilizar la función
fgets
para leer la cadena de entrada completa, incluyendo los espacios, y luego pasarla a la funciónuppercase
. Aquí está una versión actualizada del código:En esta versión, utilizamos
fgets
para leer la cadena de entrada completa, hasta una longitud máxima de 100 caracteres (según se especifica en el segundo argumento). También eliminamos el carácter de nueva línea al final de la cadena quefgets
agrega a la cadena.También realizamos un cambio menor en la función
uppercase
para utilizar literales de carácter en lugar de literales numéricos, lo que hace que el código sea más legible.Con estos cambios, el programa debería capitalizar correctamente todas las letras minúsculas en la cadena de entrada, incluso si contiene espacios.</string.h></stdio.h>