我正在从cs50课程开始学习pset2,但是我不明白为什么我一直得到这个错误,我没有声明我,因为我想我做了..首先我要求一个数字用作加密的密钥,比我要求的纯文本,应该用给定的数字加密,然后打印出来。
这是我的代码:
int main(int argc, string argv[])
{
// get key from command line argument, return 1 if wrong
if (argc < 2)
{
printf("No value entered!\n");
return 1;
}
//store key in integer
int k = atoi(argv[1]);
if (k < 0)
{
printf("No right variable detected\n");
return 1;
}
else
{
printf("Plain text: \n");
string s = get_string();
// iterate over strings in argv
for (int i = 0; n = strlen(s); i < n; i++);
{
if (isalpha(s[i]))
{
// for capitalized letters
if (isupper(s[i]))
{
int a = s[i] - 65;
int b = (a + k) % 26;
int c = b + 65;
printf("%c", c);
}
//for lowercase
else
{
int d = s[i] - 97;
int e = (d + k) % 26;
int f = e + 97;
printf("%c", f);
}
}
else
{
//for non alphabetical characters
printf("%c", s[i]);
}
}
}
// print new line
printf("\n");
return 0;
}
答案 0 :(得分:2)
For循环错误,它接受3个参数,你设置为4。
另外,请在for循环后注意分号。
这一行:
col
应该是:
for (int i = 0; n = strlen(s); i < n; i++);
注意逗号,最后没有分号
答案 1 :(得分:2)
for循环结束时有;
for (int i = 0; n = strlen(s); i < n; i++);
^
将其更改为
for (int i = 0, n = strlen(s); i < n; i++)
此外,正如您所见,init必须放在第一个分号,
(逗号)分隔之前。
旁注
您可以使用单个变量进行灰化,而不是6
if (isalpha(s[i]))
{
int ashed;
// for capitalized letters
if (isupper(s[i]))
{
ashed = s[i] - 'A';
ashed = (ashed + k) % 26;
ashed += 'A';
}
//for lowercase
else
{
ashed = s[i] - 'a';
ashed = (ashed + k) % 26;
ashed += 'a';
}
printf("%c", ashed);
}