【发布时间】:2015-09-18 21:55:16
【问题描述】:
我最初有一个凯撒的密码,看起来像这样:
#include <stdio.h>
#include <string.h>
int main (int argc, char const *argv[])
{
printf("Insira a frase:\n");
char frase [256];
//strcpy(frase, argv[1]);
scanf("%s", frase);
int size = (int)strlen(frase);
printf("Insira o tamanho da divergência: \n");
int diff = 0;
scanf("%i", &diff);
char fraseout [size+1];
int i = 0;
for (i = 0; i<=size-1; i++)
{
int val = (int)frase[i];
if (val + diff > 126)
{
while (val + diff >126)
{
val = 31+diff-(126-val);
}
}
else if (val + diff < 32)
{
while (val + diff < 32)
{
val = 127 + diff+(val-32);
}
}
else
{
val +=diff;
}
fraseout [i] = (char)val;
}
fraseout[size] = '\0';
printf("\"%s\" -> \"%s\"\n", frase, fraseout);
return 0;
}
然后我决定将其转换为 Vinegere 的密码,其中每个字符的编码编号由密码给出,并在单词的长度上进行迭代。所以,如果我的词是“abcde”而我的密码是“zx”,那么 (char, diff) 对将是 (a,z)(b,x)(c,z)(d,x)... 代码如下所示:
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[]) {
/* code */
char senha [256];
if (argv[1] != NULL)
{
strcpy(senha, argv[1]);
}
char frase [256];
printf("Insira a frase: \n");
scanf("%s", frase);
int sizeS = (int)strlen(senha);
int sizeF = (int)strlen(frase);
char fraseout [sizeF+1];
int i;
int j;
for (i=0; i<=sizeF-1; i++)
{
if(j>sizeS)
{
j=0;
}
int valF = (int)frase[i];
int valS = (int)senha[i];
printf(" F = %c = %i \n S = %c = %i\n", frase[i], valF, senha[i], valS);
if (valF+valS > 126)
{
while (valF+valS >126)
{
printf("ValF = %i\n", valF);
printf("ValS = %i\n", valS);
valF = 31 + valS-(valF-126);
printf("NewV = %i\n", valF);
}
}
else if (valF+valS < 32)
{
while (valF+valS<32)
{
valF = 127 + valS+(valF-32);
}
}
else
{
valF += valS;
}
printf("OUT = %i = %c\n",valF, (char)valF);
printf("_________________________________\n");
fraseout[i] = (char)valF;
j++;
}
fraseout[sizeF] = '\0';
printf("\"%s\" -> \"%s\"\n", frase, fraseout);
return 0;
}
由于某种原因,这段代码只是在第一个 while() 语句中进入无限循环,我不明白为什么。我该如何解决这个问题?
【问题讨论】:
-
您似乎在受影响的循环中插入了一些
printf()语句。他们打印什么? -
NewV = 176 ValF = 176 ValS = 116 NewV = 97 ValF = 97 ValS = 116 NewV = 176 ValF = 176 ValS = 116 NewV = 97 ValF = 97 ValS = 116 NewV = 176 ValF = 176 ValS = 116 NewV = 97 ValF = 97 ValS = 116 一直如此,一直如此。
-
你永远不会使用
j做任何事情。不应该是senha[j]而不是senha[i]? -
刚刚试过,没有结果,仍然“NewV = 176 ValF = 176 ValS = 116 NewV = 97 ValF = 97 ValS = 116 NewV = 176 ValF = 176 ValS = 116 NewV = 97 ValF = 97 ValS = 116 新V = 176 ValF = 176 ValS = 116 新V = 97 ValF = 97 ValS = 116 "
标签: c encryption vigenere