CS50凯撒密码问题:程序不产生任何结果 #包括 #包括 #包括 int main(int argc,字符串argv[]){ if(argv[2]) printf(“用法:./caesar键”); 返回1; 对于(int i=0;argv[1][i]!='\0';i++){ 如果是数字(argv[1][i]){ } 否则{ printf(“请只为您的密钥输入一个整数。”); 返回1; } } int key=(int)argv[1]; 如果(键

CS50凯撒密码问题:程序不产生任何结果 #包括 #包括 #包括 int main(int argc,字符串argv[]){ if(argv[2]) printf(“用法:./caesar键”); 返回1; 对于(int i=0;argv[1][i]!='\0';i++){ 如果是数字(argv[1][i]){ } 否则{ printf(“请只为您的密钥输入一个整数。”); 返回1; } } int key=(int)argv[1]; 如果(键,c,encryption,cs50,C,Encryption,Cs50,上面是我的代码。当我运行它时,它根本不返回任何东西。我尝试过使用cs50调试器,但出于某种原因,它说我每次运行它时都更改了代码(这是错误的)。没有发出任何初始错误消息,因此我不认为我输入的参数是错误的。每次我都会进入“/caesar 10”。有人知道是哪部分代码导致了这种情况吗?这 #include <stdio.h> #include <cs50.h> #include <ctype.h> int main(int argc, string argv[])

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

#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);


}


这就是为什么程序“什么都不做”。由于没有大括号
{}
来描述函数体,因此总是执行
返回1

正确缩进代码。特别是main中的前三行。实际上,你甚至不应该有一个程序运行,因为代码(正如你现在所展示的)存在会导致构建错误的错误。更不用说,你至少对C的一些基础知识(关于转换)有一个相当大的误解。请从一开始就读一两本书来学习C语言。@dgoodie此行int key=(int)argv[1];没有道理。您需要使用atoi或strtol@MaartenBodewes不幸的是,
atoi
没有任何输入验证。更好地使用strtol。
 if(argv[2])
        printf("Usage: ./caesar key");
        return 1;