嘿,我之前问了一个与此代码相关的问题,得到了很多有用的答案(我对编码很在行(。当我克服了最初的问题并纠正了一些错误时,我又遇到了一个似乎无法纠正的错误。我一直收到Segmentation错误,但我希望它能提示用户给出第二个参数。除此之外,当我给出号码时,代码似乎并没有真正加密文本。我错过了任何建议或刺耳的问题吗?
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, string argv[])
{
int num;
int k = atoi(argv[1]);
string output;
if(argc != 2)
{
printf("K not included in command");
return 1;
}
string s = get_string("Insert Lowercase Message:");
for (int i = 0, n = strlen(s); i < n; i++)
{
char c = s[i];
if (c >= 'A' && c <= 'Z')
{
num = 'A';
if (c >= 'a' && c <= 'z')
num = 'a';
printf("%c", (c - num + k) % 26 + num);
}
else
printf("%c", c);
}
}
在测试字母大小写的地方,大括号错位了。按照它的编写方式,如果遇到小写字母,大写测试将失败,您将切换到else
大小写。你想要的是这样的东西:
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, string argv[])
{
int num;
int k;
string output;
char c;
if(argc != 2)
{
printf("K not included in command");
return 1;
}
k = atoi(argv[1]);
string s = get_string("Insert Lowercase Message:");
for (int i = 0; c = s[i]; i++)
{
if (isalpha(c))
{
if (isupper(c))
num = 'A';
else // islower
num = 'a';
printf("%c", (c - num + k) % 26 + num);
}
else
printf("%c", c);
}
}