【问题标题】:CS50 Caesar - ASCII letters and Output formatCS50 Caesar - ASCII 字母和输出格式
【发布时间】:2017-09-09 15:20:48
【问题描述】:

我一直在尝试解决 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");
}

任何帮助将不胜感激。谢谢你。

【问题讨论】:

  • C 没有字符串类型。什么是“字符串”?
  • @MartinJames:typedef char *string;。那是一些 CS50 垃圾混淆。还有一个不使用这门课程的理由。
  • 当问题标记为 CS50 (cs50) 时,stringchar * 的类型定义。请习惯它——做 CS50 的人不知道有什么不同,因为他们没有被教过任何不同的东西。当它没有被标记为 CS50 时,您可以添加标记或对其使用进行尖锐的嘲讽。
  • @Olaf:CS50 是我对 C 的第一次介绍,所以恐怕我还不知道它允许我们做什么,不允许我们做什么。希望将来我能够弄清楚最佳实践是什么。谢谢。
  • 另一个获得帮助的地方是cs50.stackexchange.com,这是一个专门为 CS50 学生提供的 SE 网站。

标签: c cs50 caesar-cipher


【解决方案1】:

首先,您必须遵循问题的规范。也就是说,您必须在输入之前打印出单词'plaintext:'并在给出任何输出之前打印出'ciphertext:'。由于检查过程是自动化的,这变得非常重要。注意问题陈述中这些词的大小写。 其次,我会让你自己弄清楚逻辑,这是问题集的重要部分。尝试观看接下来的几堂课,学习如何在 CS50 IDE 中使用调试器。它将帮助您自己解决代码中的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2022-07-01
    • 2020-11-20
    相关资源
    最近更新 更多