CS50 凯撒密码将 16 添加到我输入的任何密码

问题描述 投票:0回答:1

Caesar 程序旨在获取您的文本,将输入的密钥添加到其中并显示加密文本。我的代码将 16 添加到我输入的任何键上。

我已经硬编码了从密钥中减去 16 的代码;它解决了所有问题,但我不知道真正的问题是什么。

代码

#include <cs50.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
int main(int argc, string argv[])
{
    if(argc != 2)
    {
        printf("./caesar (key here)\n");
        return 0;
    }
    else
    {
        // Make sure every character in argv[1] is a digit
        int c = argv[1][0];

        if(isdigit(c))
        {
            // Convert argv[1] from a `string` to an `int`
            // int k = argv[1];
            // Prompt user for plaintext
            string p = get_string("Input text to be coded:");
            int j = strlen(p);
            for(int i = 0 ; i < j ; i++)
            {
                //p[i] = p[i] + c;
                printf("%c" , p[i] + (c - 16));

            }
        }
        else
        {
            printf("./caesar (key here)\n");
            return 0;
        }
    }
}
c cs50 caesar-cipher
1个回答
0
投票

您似乎想将传递给程序的参数表示的数值添加到输入中的每个字符。

所以你的循环应该是:

            for (int i = 0 ; i < j; i++)
            {
                printf("%c" , p[i] + (c - '0'));
            }

其中

c - '0'
为您提供字符
c
代表的数值。

此外,您可以通过将防护装置都放在

main
函数的顶部(并返回
1
以指示这些情况下的错误而不是
0
来指示错误)来重新排序以避免缩进。

#include <cs50.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>

int main(int argc, string argv[]) {
    if(argc != 2) {
        printf("./ceaser (key here)\n");
        return 1;
    }

    int c = argv[1][0];
    if (!isdigit(c)) {
        printf("./ceaser (key here)\n");
        return 1;
    }

    int offset = c - '0';

    string p = get_string("Input text to be coded:");
    int j = strlen(p);
    for (int i = 0 ; i < j ; i++) {
        printf("%c" , p[i] + offset);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.