首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码caesar加密码要求密钥两次?

编码caesar加密码要求密钥两次?
EN

Stack Overflow用户
提问于 2020-11-11 12:13:21
回答 1查看 34关注 0票数 1

我实现了caesar-cipher算法,但似乎没有捕捉到所有细节,因为当我运行程序时,它要求输入两次密钥!

代码语言:javascript
复制
#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("%d\n",&key);
    if(key < 26 && key > 0){
        printf("nice!, now enter a word to encrypt it\n");
        gets(text); //this step is necessary to pass text onto encoder function.
        encoder(text);
        puts(text);
    } else{
       printf("Yeuch!!\n");
    }

}

输出示例如下:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-11 12:22:50

%d忽略换行符-标准输入中的换行符将保留,如果您的格式是%d\n,则需要两次回车。

if子句中的gets(text)删除了换行符-您只需将format更改为%d即可。

解决方案:

代码语言:javascript
复制
int main() {
    printf("enter the key: \n");
    scanf("%d", &key);
    if (key < 26 && key > 0) {
        printf("nice!, now enter a word to encrypt it\n");
        gets(text); // this step is necessary to pass text onto encoder
                    // function.
        encoder(text);
        puts(text);
    } else {
        printf("Yeuch!!\n");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64780379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档