Шифрование Цезаря с использованием матриц и символов, ошибка в числах

Здесь у меня есть код, в основном я должен использовать C-Stop шифрование, используя только матрицы и символы, вот что у меня сейчас:

#include 
#include 


main ()
{
    char alfabeto[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    int a=0;
    int b=0;
    int m=0;
    int c=0;
    //char letra;
    int cont=0;
    char k[]={};


    printf("Introduzca un primer numero 'a':\n");
    scanf(" %i", &a);
    printf("Introduzca un segundo numero 'b':\n");
    scanf(" %i", &b);

    printf("Introduzca una palabra clave entre 4 y 10 letras (cuando termine presione '.'):\n");    

    //Falta una validacion para la palabra.

        for (int j=0;j<10;j++)
        {
            scanf(" %c",&k[j]);
            cont=j; //cuenta la cantidad de elementos
            if (k[j]=='.')
            {
                j=10;
            }
        }

        for(int j=0;j

Используйте формулу где c=(a*m+b).

  • m положение исходной буквы, например: A = 0, затем m = 0.

  • a и b - это число, которое выбирает пользователь.

В моем случае используйте a=1 и b=3, а CESAR - это ключевое слово.

Согласно формуле значение c для каждой буквы должно быть:

Результат должен быть:

C равно: 5 E равно: 7 S равно: 21 A равно : 3 R это: 20

Но это в моем случае:

ResultadoErroneo

0
задан 31.03.2016, 23:43
1 ответ

Проблема состоит в том, что ты не даешь ему размер переменная k, из-за этого переменные, которые ты объявляешь в for они заканчивают тем, что "sobrescritas", когда ты начинаешь в agrear элементы в договоренности, это ломает всю логику, что ты запрограммировал так как переменные, у них есть любая стоимость и не тот, что ты ждал.

Помни, что в C памятью управляешь ты, из-за этого, если ты проходишь площади памяти, распределенной переменной, ты топчешь другую переменную, особенно в переменных функции, так как они обосновываются в stack (или батарейка).

Решение состоит в том, чтобы давать ему размер переменной, меняясь:

char k[]={};

поэтому другой:

char k[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};

Также ты мог бы распределять ему память dinámicamente с функцией malloc, но он не необходим, так как он используется внутри функции только.

Мой Вывод:

$ ./a
Introduzca un primer numero 'a':
1
Introduzca un segundo numero 'b':
3
Introduzca una palabra clave entre 4 y 10 letras (cuando termine presione '.'):
CESAR.
C es: 5         E es: 7         S es: 21        A es: 3         R es: 20
0
ответ дан 24.11.2019, 14:40
  • 1
    Большое спасибо! :D он решил проблему – Constanza 31.03.2016, 23:36
  • 2
    не за что! привет коллега – rnrneverdies 31.03.2016, 23:38