与维吉尼斗争! (在 C 中)二进制表达式('int *' 和 'int')和其他东西的无效操作数
Posted
技术标签:
【中文标题】与维吉尼斗争! (在 C 中)二进制表达式(\'int *\' 和 \'int\')和其他东西的无效操作数【英文标题】:Struggling with Vigenere! (In C) invalid operands to binary expression ('int *' and 'int') and other things与维吉尼斗争! (在 C 中)二进制表达式('int *' 和 'int')和其他东西的无效操作数 【发布时间】:2017-09-15 11:39:09 【问题描述】:我们现在正在与凯撒合作,维吉尼。我设法完成了凯撒,但维吉内尔的工作效果不佳。 C 还给我:二进制表达式的无效操作数('int *' 和 'int')。我不确定该程序的确切含义以及我的代码有什么问题。有人可以帮助我或给我建议吗?我想是因为我不能用不同类型的数字来计算?我不确定!
#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, string argv[])
if (argc != 2)
printf("You have to input a key, try again!\n");
return 1;
string key = argv[1];
int keylength = strlen(key);
for (int i = 0; i < keylength; i++)
if (!isalpha(argv[1][i]))
printf("Please insert letters, nothing else\n");
return 1;
printf("plaintext: ");
string plain = get_string();
int keycipher[keylength];
for(int i = 0; i < keylength; i++)
keycipher[i] = toupper(key[i]) - 65;
if (plain != 0)
printf("ciphertext: ");
int i;
for (i = 0, keylength = strlen(key); i < keylength; i++)
if (isupper(plain[i]))
printf("%c", (plain[i] - 65 + keycipher) % 26);
else if (islower(plain[i]))
printf("%c", (plain[i] - 97 + keycipher) % 26);
else if (plain[i] == ' ')
printf(" ");
else
printf("%c", plain[i]);
return 0;
【问题讨论】:
+ keycipher
--> + keycipher[index]
纯文本似乎比密钥长,明文使用密钥长度似乎是不正确的。所以不可能使用它们共有的索引。
你应该在cs50网站上提问吗?也可以使用edit 链接...
见this
【参考方案1】:
如 cmets 中所述,您必须使用 + keycipher[index]
而不是 + keycipher
。这是因为keycipher
是一个数组,您一次只需要使用一个数组元素。
此外,在找到ciphertext
的部分中,您将需要 2 个计数器变量,而不仅仅是一个。这是因为您需要在每次迭代中增加plaintext
索引和key
索引,但是一旦plaintext
长度超过key
长度,您将需要重置键索引。
如果您查看规格,您就会明白我所说的使用 2 个计数器。
【讨论】:
以上是关于与维吉尼斗争! (在 C 中)二进制表达式('int *' 和 'int')和其他东西的无效操作数的主要内容,如果未能解决你的问题,请参考以下文章