我正在经历CS50,并且卡在pset2凯撒(caesar)上。我按照说明进行了逐步操作,并且跳过了验证密钥的部分-确保命令行参数只是一个数字(./caesar 20),如果不是(./caesar 20x或./caesar xyz)以打印出用法:./ caesar键\ n。但是,一旦我添加了以下几行以提示用户输入纯文本,然后打印出密文,它似乎并没有注册验证密钥的前几行。我知道哈佛大学的学术诚信政策,因此我希望对此提供一些提示/帮助/解释。我已经在下面发布了我的代码,非常感谢您的帮助。
int main(int argc, string argv[])
{
int i = 0;
if(isalpha(argv[1][i]))
{
printf("Usage: ./caesar key\n");
return 1;
}
else
{
int key = atoi(argv[1]);
string text = get_string("plaintext: ");
printf("ciphertext: ");
int n = strlen(text);
for(i = 0; i < n; i++)
{
if(isupper(text[i]))
{
printf("%c", (((text[i] - 65) + key) % 26) + 65);
}
else if(islower(text[i]))
{
printf("%c", (((text[i] - 97) + key) % 26) + 97);
}
else
{
printf("%c", text[i]);
}
}
}
printf("\n");
return 0;
}
您需要重新输入验证。
argv[1]
。程序应该测试参数的每个字符都是一个数字(请参阅参考资料man isdigit
)。isalpha()
不是一个很好的测试。如果用户输入$
怎么办?尚不清楚程序何时无法运行,但是基于这些缺陷,这将无法通过check50。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句