【问题标题】:CS50 Caesar Cipher Problem: Program Produces NothingCS50 凯撒密码问题:程序不产生任何结果
【发布时间】:2020-11-12 20:47:21
【问题描述】:
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>

int main(int argc, string argv[]){

    if(argv[2])
        printf("Usage: ./caesar key");
        return 1;

    for(int i = 0; argv[1][i] != '\0'; i++){
        if isdigit(argv[1][i]){

        }
        else{
            printf("Please only enter an integer for your key.");
            return 1;
        }
    }


    int key = (int) argv[1];

    if(key < 1){
        printf("Please only enter an integer greater than or equal to 1.");
        return 1;
    }

    printf("Success: \n%i", key);


    string plaintext = get_string("plaintext: ");


    for(int i = 0; plaintext[i] != '\0'; i++){
        if isupper(plaintext[i]){
            int character = (int) plaintext[i];
            character += (key % 26);
            character = 65 + (90 % character);
            plaintext[i] = (char) character;
        }
        else if islower(plaintext[i]){
            int character = (int) plaintext[i];
            character += (key % 26);
            character = 97 + (122 % character);
            plaintext[i] = (char) character;
        }
    }

    printf("ciphertext: %s", plaintext);


}

以上是我的代码。当我运行它时,它根本不返回任何东西。我曾尝试使用 cs50 调试器,但由于某种原因,它说我每次运行它时都更改了我的代码(这是错误的。)初始错误消息都没有触发,所以我认为我没有输入错误的参数.我每次都输入“./caesar 10”。有没有人知道代码的哪一部分导致了这种情况?

【问题讨论】:

  • 正确缩进你的代码。尤其是 main 中的前三行。
  • 实际上,您甚至不应该让程序运行,因为代码(如您当前显示的那样)存在会导致构建错误的错误。
  • 更不用说你对 C 的一些基础知识(关于转换)至少有一个相当大的误解。请从一开始就读一两本书来学习 C。
  • @dgoodie 这一行 int key = (int) argv[1];没有意义。你需要使用 atoi 或 strtol
  • @MaartenBodewes 不幸的是atoi 没有任何输入验证。最好使用strtol

标签: c encryption cs50


【解决方案1】:

这个

 if(argv[2])
        printf("Usage: ./caesar key");
        return 1;

这就是程序“什么都不做”的原因。由于没有花括号{} 来描述函数体,所以return 1 总是会执行。

【讨论】:

    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 2019-02-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多