Кодирование кода шифрования caesar запрашивает ключ дважды?

#c #algorithm #cs50 #caesar-cipher

#c #алгоритм #cs50 #caesar-cipher

Вопрос:

Я реализовал алгоритм caesar-cipher, но, похоже, я не уловил всех деталей, потому что, когда я запускаю программу, она запрашивает ввод ключа дважды!

 #include <stdio.h>
#include <string.h>
#define SIZE 1024
char text[SIZE];
int text_2[SIZE];
int key;
int encoder(char text[SIZE]){
        printf("plaintext: n");
        gets(text);
        for (int i = 0; i < strlen(text);   i) {
            text_2[i] = (int) text[i];
            text_2[i] = text_2[i]   key;
            text[i] = (char) text_2[i];

        }
    return 0;
}

int main() {
    printf("enter the key: n");
    scanf("%dn",amp;key);
    if(key < 26 amp;amp; key > 0){
        printf("nice!, now enter a word to encrypt itn");
        gets(text); //this step is necessary to pass text onto encoder function.
        encoder(text);
        puts(text);
    } else{
       printf("Yeuch!!n");
    }

}
  

Примером вывода является:

 enter the key: 
2 //I press 2 and nothing happens, then it asks for it again, hence why I have two 2's
2
nice!, now enter a word to encrypt it
plaintext: 
a
c

Process finished with exit code 0
  

Ответ №1:

%d игнорирует символ новой строки — символ новой строки в стандартном формате останется, если ваш формат есть %dn , ему нужно два ввода.

и gets(text) в предложении if удаляет символ новой строки — вам нужно просто изменить формат на %d .

Решение:

 int main() {
    printf("enter the key: n");
    scanf("%d", amp;key);
    if (key < 26 amp;amp; key > 0) {
        printf("nice!, now enter a word to encrypt itn");
        gets(text); // this step is necessary to pass text onto encoder
                    // function.
        encoder(text);
        puts(text);
    } else {
        printf("Yeuch!!n");
    }
}