CS50 Caesar - ASCII字母和输出格式

时间:2017-09-09 15:20:49

标签: c cs50 caesar-cipher

我一直在尝试解决cs50的凯撒问题不太舒服的版本,并且只想说这个问题我说我是一个完全的初学者。

该程序应该要求用户输入密钥和明文,然后使用提供的密钥对该文本进行加密。例如,对于2的键,“aba”将是“cdc”。

我认为我设法让程序正常运行,除了两件事:密文或加密文本的输出应采用“密文:”的形式,而不仅仅是输出的字符串,就像我的程序一样。另一个更重要的问题是输入的密钥是否大于26,其中输出包括其他不需要的符号而不仅仅是字母。

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

int main (int argc, string argv [])
{
    if (argc != 2)
    {
        printf ("Error. Instructions not followed.\n");
        return 1;
    }
    int key = atoi(argv [1]);
    printf ("%i\n", key);
    printf("Plaintext:");
    string plaintext = get_string();
    int i = 0;
    for (char c = 'A'; c <= 'Z'; c++)
    {
        i++;
    }
    for (int j = 0; j < strlen(plaintext); j++)
    {
        char ciphertext = ((plaintext[j]+key%26));
        if (isupper (plaintext[j]) || islower (plaintext[j]))
        {
            printf("%c", ciphertext);
        }
        if (isalpha (plaintext [j]) == false)
        {
            printf("%c", (plaintext[j]));
        }
    }

printf("\n");
}

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

首先,您必须遵循问题的规范。也就是说,你必须在输入之前打印出“明文:”这个词,然后在输出任何输出之前打印出“密文:”。由于检查过程是自动化的,因此这变得非常重要。请注意问题陈述中这些单词的情况。 其次,我会让你自己弄清楚逻辑,这是问题集的重要部分。尝试观看接下来的几个讲座,并学习如何在CS50 IDE中使用调试器。它将帮助您自己解决代码中的问题。