es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , , , ,

Answer

  1. Avatar for 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ón uppercase.

    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ón uppercase. Aquí está una versión actualizada del código:

    #include <stdio.h>
    #include <string.h>
    
    char *uppercase(char *c) {
        int i = 0;
        while (c[i] != '\0') {
            if ('a' <= c[i] && c[i] <= 'z') {
                c[i] = c[i] - 'a' + 'A';
            }
            i++;
        }
        return c;
    }
    
    int main() {
        char input[100];
        printf("Ingrese la frase: ");
        fgets(input, 100, stdin);
        // eliminar el carácter de nueva línea al final de la entrada
        input[strcspn(input, "\n")] = '\0';
        printf("%s\n", uppercase(input));
        return 0;
    }
    

    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 que fgets 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>

Comments are closed.