【发布时间】:2016-09-18 12:11:01
【问题描述】:
#include<stdio.h>
#include<cs50.h>
#include<ctype.h>
#include<string.h>
int main(int argc, string argv[]){
int k,j,i=0,ch,pos;
bool apha=true;
string in = GetString();
int num = strlen(in);
for(int z=0;z<strlen(argv[1]);z++){
if(!isalpha(argv[1][z])){
apha=false;
}
}
if(argc!=2||!apha){
printf("Dude we only accept alphabets...");
return 1;
}
string key = argv[1];
int keylength = strlen(key);
for (i=0,j=0;i<num;i++,j++){
if(isupper(key[i])){
k=key[j%keylength]-'A';
}
if(islower(key[i])){
k=key[j%keylength]-'a';
}
if(isupper(in[i])){
pos=in[i]-'A';
ch = ((pos + k)%26) + 'A';
printf("%c",ch);
}
if(islower(in[i])){
pos=in[i]-'a';
ch = ((pos + k)%26) + 'a';
printf("%c",ch);
}
if(isspace(in[i])){
printf(" ");
}
if(ispunct(in[i])){
printf("%c",in[i]);
}
}
printf("\n");
}
输出条件检查: :) vigenere.c 存在
:) vigenere.c 编译
:) 使用“a”作为关键字将“a”加密为“a”
:( 使用“baz”作为关键字将“world, say hello!”加密为“xoqmd, rby gflkp!”
\ 预期输出,但不是“xoqkj, yfd gfllp!\n”
:(使用“BaZ”作为关键字将“BaRFoo”加密为“CaQGon”
\预期的输出,但不是“CaQEun\n”
:(使用“BAZ”作为关键字将“BARFOO”加密为“CAQGON”
\ 预期输出,但不是“CAQEON\n”
:( 处理缺少 argv[1]
\预期的输出,而不是输入提示
:( 处理 argc > 2
\预期的输出,而不是输入提示
:(拒绝“Hax0r2”作为关键字
\预期的输出,而不是输入提示
我的代码有什么问题?我仔细检查了逻辑,错误似乎在于密钥的包装方式,尽管我找不到任何错误。我哪里出错了?
【问题讨论】:
-
".. \ 预期的输出,而不是输入提示.." 是否因为没有要求输入的代码而皱眉?
-
好吧,也许……但这是一个简单的错误(或多或少),这是让我害怕的逻辑错误。
-
SO 主要用于提出明确的问题,调试/修复代码对其他人几乎没有用处。请向您所在的机构寻求帮助。
-
您在检查密钥时使用了错误的索引:
isupper(key[i]),在使用之前最好“预处理”密钥(预先计算 k 值)。 -
我知道我不应该在 SO...如果有人看到这种错误,则问题出在密钥增量器(此处为 j)的增量中。
标签: c encryption cs50 vigenere