【发布时间】: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