**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。
这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
对不起,我知道以前有人问过这个问题,但是我已经看过所有的答案,没有任何结果!请帮助。当我检查实际输出和预期输出时,它们是匹配的,但是在check 50中它给出了一个错误消息。下面是check 50结果的链接:https://submit.cs50.io/check50/6d939efb8a55e3fadec1c60952311f6198cd0eb0
#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
char crypt(int k,char w)
{
if ('a'<= w && w <='z')
{
return (((w-'a')+ k)%26+'a');
}
else if ('A' <= w && w <= 'Z')
{
return (((w -'A') + k) % 26 + 'A');
}
else
{
return (w);
}
}
int main(int argc, string argv[])
{
//input check
if (argc != 2)
{
printf("Usage: ./caesar key\n");
return 1;
}
int lngg = strlen(argv[1]);
for (int i = 0; i < lngg; i++)
{
if (isdigit(argv[1][i]) == 0)
{
printf("Usage: ./caesar key\n");
return 1;
}
}
int key = atoi(argv[1])%26;
//input
string plain = get_string("plaintext: ");
//crpypt starts
printf("ciphertext: ");
int lng = strlen(plain)+1;
for (int a = 0; a < lng ;a++)
{
printf("%c", crypt(key, plain[a]));
}
printf("\n");
}
嗨,当我查看预期和实际输出时,一切似乎都很完美,但它出错了
2条答案
按热度按时间7qhs6swi1#
问题是您还使用
printf
将终止空字符打印到标准输出。此字符不可打印,因此您看不到它,但check50
确实检测到它,因此报告程序失败。该回路
将运行
strlen(plain)+1
次迭代,因为这是您将变量lng
设置为的值。您应该改为将
lng
的值设置为strlen(plain)
,以防止打印终止空字符。ttcibm8c2#
@w是正确的。
此外,代码可以避免2次传递字符串,而只传递1次。