Ceaser 程序旨在获取您的文本,将输入的密钥添加到其中并显示加密文本。我的代码将 16 添加到我输入的任何键上。
我已经对代码进行了硬编码,从密钥中减去 16,它解决了所有问题,但我不知道真正的问题是什么。
代码
#include <cs50.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
int main(int argc, string argv[])
{
if(argc != 2)
{
printf("./ceaser (key here)\n");
return 0;
}
else
{
// Make sure every character in argv[1] is a digit
int c = argv[1][0];
if(isdigit(c))
{
// Convert argv[1] from a `string` to an `int`
// int k = argv[1];
// Prompt user for plaintext
string p = get_string("Input text to be coded:");
int j = strlen(p);
for(int i = 0 ; i < j ; i++)
{
//p[i] = p[i] + c;
printf("%c" , p[i] + (c - 16));
}
}
else
{
printf("./ceaser (key here)\n");
return 0;
}
}
}
您似乎想要将传递给程序的参数表示的数值添加到输入中的每个字符。
所以你的循环应该是:
for (int i = 0 ; i < j; i++)
{
printf("%c" , p[i] + (c - '0'));
}
其中
c - '0'
为您提供字符 c
代表的数值。
此外,您可以通过将防护装置都放在
main
函数的顶部(并返回 1
以指示这些情况下的错误而不是 0
来指示错误)来重新排序以避免缩进。
#include <cs50.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
int main(int argc, string argv[]) {
if(argc != 2) {
printf("./ceaser (key here)\n");
return 1;
}
int c = argv[1][0];
if (!isdigit(c)) {
printf("./ceaser (key here)\n");
return 1;
}
string p = get_string("Input text to be coded:");
int j = strlen(p);
for (int i = 0 ; i < j ; i++) {
printf("%c" , p[i] + (c - '0'));
}
}