输出不是我期望的,代码没有打印任何错误,我也不知道出了什么问题

时间:2019-06-05 08:43:02

标签: c cs50 vigenere

Vigenere密码 接收文本并输出该文本的密码版本 用户在命令行中输入关键字和用户希望为其加密的文本。如果您熟悉Ceasar密码,除了有很小的微小变化外,它几乎是同一件事,我们不用输入实际的偏移值,而是输入关键字,而关键字中的字母代表偏移值。

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

int shift(char c);

int main(int argc, string argv[])
{    
    //checks for alphabetic characters
    if (argc == 2)
    {
        for (int i = 0, n = strlen(argv[1]); i < n; i++)
        {
            if (isalpha(argv[1][i]) == false)
            {
                printf("Usage: ./vigenere keyword. \n");
                return 1;
            }
        }

        //promting the user for text
        string text = get_string("plaintext:  ");
        printf("ciphertext: ");

        //Intializing variables
        string key = argv[1];
        int l = strlen(key);

        for (int j = 0, k = 0, m = strlen(text); j < m; j++)    
        {
            if (islower(text[j]))
            {
                //lower cap letter enter here 
                printf("%c", 'a' + ( text[j] - 'a' + shift(key[k % l]) ) % 26);
                k++;
            }               
            else if (isupper(text[j]))
            {
                //Upper caps letter enter here
                printf("%c", 'A' + ( text[j] - 'A' + shift(key[k % l]) ) % 26);
                k++;
            } 
            else
            {
                //The rest whatever left enter here 
                printf("%c", text[j]);
            }
        }
        printf("\n");
        return 0;
    }
    else
    {
        printf("Usage: ./vigenere keyword. \n");
        return 1;
    }
}

//This function calculates the shift value per character 
int shift(char c)
{
    return ( islower(c) - 'a' );
}

问题在于输出不是我期望的那样。例如,如果关键字为“ b”且文本为“ hello”,则输出必须为“ ifmmp”,但不是。我不知道怎么了。

0 个答案:

没有答案