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.

Problema con las sentencias if, que contienen un token de strtok en C.

Aquí está la tarea:

1) 07/21/2003
2) 21 de julio de 2003

Escribe un programa que lea una fecha en el primer formato y la imprima en el segundo formato.

Se supone que debo usar métodos de cadena, especialmente strtok.

Aquí está mi código:

#include <stdio.h>
#include <string.h>

int main()
{
    char date[20];
    char month[20];
    char day[20];
    char year[20];
    char *token;
    char sep[2] = "/";

    printf("Ingrese la fecha (MM/DD/YYYY): ");
    gets(date);

    token = strtok(date, sep);

    if (strcmp(token, "01") == 0)
    {
        strcpy(month, "Enero");
    }

    else if (strcmp(token, "02") == 0)
    {
        strcpy(month, "Febrero");
    }

    // continuar de esta manera

    }

    else if (strcmp(token, "11") == 0)
    {
        strcpy(month, "Noviembre");
    }

    else
    {
        strcpy(month, "Diciembre");
    }

    token = strtok(NULL, sep);
    strcpy(day, token);

    token = strtok(NULL, sep);
    strcpy(year, token);

    printf("%s %s, %s", month, day, year);
}

El problema es que la parte del mes siempre da Diciembre, lo que significa que las declaraciones if no funcionan.</string.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo determinar con precisión la causa del problema en el código proporcionado. Sin embargo, es importante tener en cuenta que al comparar cadenas en C, el operador == no funciona como se espera. Para comparar cadenas, debes utilizar la función strcmp(). Además, se recomienda utilizar la función fgets() en lugar de gets() para evitar desbordamientos de búfer.

    Aquí tienes una versión actualizada del código que debería funcionar correctamente:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char date[20];
        char month[20];
        char day[20];
        char year[20];
        char *token;
        char sep[2] = "/\0";
    
        printf("Introduzca la fecha (MM/DD/AAAA): ");
        fgets(date, sizeof(date), stdin);
        date[strcspn(date, "\n")] = '\0'; // elimina el carácter de nueva línea de la entrada de fgets
    
        token = strtok(date, sep);
    
        if (strcmp(token, "01") == 0)
        {
            strcpy(month, "Enero");
        }
    
        else if (strcmp(token, "02") == 0)
        {
            strcpy(month, "Febrero");
        }
    
        // continuando de esta manera
    
        }
    
        else if (strcmp(token, "11") == 0)
        {
            strcpy(month, "Noviembre");
        }
    
        else
        {
            strcpy(month, "Diciembre");
        }
    
        token = strtok(NULL, sep);
        strcpy(day, token);
    
        token = strtok(NULL, sep);
        strcpy(year, token);
    
        printf("%s %s, %s\n", month, day, year);
    
        return 0;
    }
    

    Espero que esta traducción te sea útil.</string.h></stdio.h>

Comments are closed.