Necesito escribir un programa que almacene un mensaje específico (S M Z V Q O P I V) en un conjunto de variables de caracteres, y luego aplique un valor de cambio de 8 antes de enviar el mensaje descifrado un carácter a la vez. La salida debe verse como una cadena de caracteres mediante el uso de una cadena de formato que incluya varios especificadores% c.

Solo puedo encontrar ejemplos de código que requieren la entrada del usuario, y aunque solo modifiqué esto para tener variables que ya contienen los valores requeridos, estoy luchando por entender cómo se supone que el código itera a través de la cadena, es decir = ch - 'Z' + 'A' = 1, ¿qué significa esto realmente en términos de usar operadores entre letras?

Esto es lo que tengo hasta ahora, aunque el código muestra [Ub ^ YWXQ ^ como mensaje cifrado, ¿hay alguna forma de corregir los caracteres que deberían ser letras? ¿Debería Z convertirse en H?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char message[] = "SMZVQOPIV";
    int i;
    int key = 8;

    printf("%s", message);

    char ch= message [i];

    for(i = 0; message[i] !='\0';++i)
    {
        ch = message[i];

        if(ch >= 'A' && ch <= 'Z'){
            ch = ch + key;
            if (ch > 'z'){
                ch = ch - 'Z' + 'A' - 1;
            }
            message[i] = ch;
        }
    }

    printf("Encrypted Message: %s", message);
    return 0;
}

¿Alguien podría explicarme brevemente cómo debería verse el código y por qué, por favor? Ha pasado un tiempo desde que hice alguna programación y solía usar Python, así que estoy un poco perdido en C.

-1
jamieeloise_x 17 nov. 2019 a las 19:37

1 respuesta

La mejor respuesta
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char message[] = "SMZVQOPIV";
    int i;
    int key = 8;

    printf("%s\n", message);
    /*
    *   "printf("%s", message);" -> "printf("%s\n", message);"
    *   you have to print a newline('\n') by yourself,
    *   it's not automatic as "print" in python
    */


    /*
    *   There was a "char ch= message [i];" 
    *   unecessary and it gives error(i is not initialised)
    */

    for (i = 0; message[i] != '\0'; ++i)
    {

        char ch = message[i];
        /*
        *   "ch = message[i];" -> "char ch = message[i];"
        *   when you define an object in C, you have to specify its type
        */

        if (ch >= 'A' && ch <= 'Z') {
            ch = ch + key;
            if (ch > 'Z') {
                /*
                *   Main error here, but just a blunder
                *   "if (ch > 'z') {" -> "if (ch > 'Z') {"
                *   Upper case is important ;), 'Z' is 90 in decimal,
                *   'z' is 122
                */

                ch = ch - 'Z' + 'A' - 1;
            }
            message[i] = ch;
        }
    }

    printf("Encrypted Message: %s", message);
    return 0;
}
0
rotcod 17 nov. 2019 a las 20:43