Caesar 程序旨在获取您的文本,将输入的密钥添加到其中并显示加密文本。我的代码将 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("./caesar (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("./caesar (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;
}
int offset = c - '0';
string p = get_string("Input text to be coded:");
int j = strlen(p);
for (int i = 0 ; i < j ; i++) {
printf("%c" , p[i] + offset);
}
}