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调试器,但出于某种原因,它说我每次运行它时都更改了代码(这是错误的)。没有发出任何初始错误消息,因此我不认为我输入的参数是错误的。每次我都会进入“/caesar 10”。有人知道是哪部分代码导致了这种情况吗?这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[])
#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;