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.

¿Es posible usar strcpy con variables de un solo carácter?

Aquí está la función principal en un programa que escribí en el que necesito ordenar un array de caracteres, colocando al principio los que tienen un código ASCII par y quiero mostrar cómo se ordena el array en cada iteración.



```include<stdio.h>``` ```include<stdlib.h>``` ```include<string.h>``` int main() { int n, i, j; char echange; printf("tamaño del array: "); scanf("%d", &n); char t[n]; for (i = 0; i < n; i++) { printf("ingrese elementos del array: "); scanf(" %c", &t[i]); } for (j = 0; j < n; j++) for (i = 0; i < n; i++) { if ((t[i] % 2 != 0) && (t[i + 1] % 2 == 0) && (i != n - 1)) { strcpy(echange, t[i]); strcpy(t[i], t[i + 1]); strcpy(t[i + 1], echange); printf(" %c (%d)", t[i], t[i]); } else printf(" %c (%d)", t[i], t[i]); } } Este problema se compila normalmente, pero la salida es extraña: tamaño del array: 3 ingrese elementos del array: d ingrese elementos del array: f ingrese elementos del array: g 2 └ (100) ┴ (102) ┬ (103) └ (100) ┴ (102) ┬ (103) └ (100) ┴ (102) ┬ (103) El proceso devolvió 0 (0x0) tiempo de ejecución: 4.063 s Presione cualquier tecla para continuar. Entonces, ¿qué está mal con mi código? ¿y cómo usar strcpy con caracteres individuales? y por cierto, intenté sin la función strcpy: echange = t[i]; t[i] = t[i+1]; t[i+1] = echange;

y tampoco funcionó.</string.h></stdlib.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con tu código:

    1. La variable “echange” debería declararse como un carácter (char), no como un puntero a carácter (char pointer). La función strcpy() se utiliza para copiar cadenas de texto, no caracteres individuales. Para un solo carácter, puedes utilizar el operador de asignación (=) en su lugar.
    2. En tus sentencias printf, estás pasando la dirección de memoria del carácter en lugar del carácter mismo. Debes eliminar el símbolo de ampersand (&) antes de t[i] en la cláusula else.
    3. En tu bucle for interno, estás accediendo a t[i+1] incluso cuando i=n-1, lo cual está fuera de los límites. Debes agregar una comprobación para evitar esto.

    Aquí está el código corregido:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    int main()
    {
        int n, i, j;
        char echange;
        printf("Tamaño del array: ");
        scanf("%d", &n);
        char t[n];
        for (i = 0; i < n; i++)
        {
            printf("Ingrese un elemento del array: ");
            scanf(" %c", &t[i]);
        }
    
        for (j = 0; j < n; j++)
        {
            for (i = 0; i < n - 1; i++)
            {
                if ((t[i] % 2 != 0) && (t[i + 1] % 2 == 0))
                {
                    echange = t[i];
                    t[i] = t[i + 1];
                    t[i + 1] = echange;
                }
            }
            for (i = 0; i < n; i++)
            {
                printf("%c (%d) ", t[i], t[i]);
            }
            printf("\n");
        }
    }
    

    Con estos cambios, el programa debería ejecutarse correctamente y mostrar el array ordenado en cada iteración.</string.h></stdlib.h></stdio.h>

Comments are closed.