C语言if语句问题

时间:2016-11-30 02:28:49

标签: c if-statement encryption vigenere

我创建了以下程序来制作Caesar和Vigenere密码。我已经让Caesar密码正常工作,但是我无法让Vigenere正常工作。

我想要发生的是我的if语句" catch"所有各种数字的间隔为5.但是每当我运行程序时,我的Viegenere密码输出完全相同的输入。我相信这是因为我在if语句中犯了错误,但我不确定它是什么。

Viegenere密码的开头在代码中被注释为// Vigenere Cipher--关键字是" apple"

flatMap

1 个答案:

答案 0 :(得分:4)

在再次加密数据之前 - 您应该重新初始化“i”变量

的值
#include <stdio.h>


    int main(){
    int i = 0;
    //setting the individual slot number for the array-- later used in the  while loop
    char guy[100];
    printf("Enter the plain text:");
    fgets(guy, 100, stdin); //takes user's input-- such as "abc" and puts it into its respective slot in the array guy[10] r-right?

    while (guy[i] != '\0'){ //while loop that runs until it reaches the end of the string


        if ((guy[i]) >= 'A' && (guy[i] <= 'Z')){ //moves capital letter values up 1
            if (guy[i] == 'Z'){
                guy[i] = guy[i] - 25;
            }
            else {
                guy[i] = guy[i] + 1; //makes the current "slot" number go up 1 value. Example: a = 97 + 1 -> b = 98
            }
        }
        if ((guy[i]) >= 'a' && (guy[i]) <= 'z'){// moves lower case letter values up 1
            if (guy[i] == 'z'){
                guy[i] = guy[i] - 25;
            }
            else{
                guy[i] = guy[i] + 1;
            }
        }
        i++; //moves the array's interval up to the next "slot"

    }
    printf("Encrypted text is: %s\n", guy);

    //Vigenere Cipher-- keyword is "apple"
    //a = 1  value shift
    //p = 16 value shift
    //p = 16 value shift
    //l = 17 value shift
    //e = 5  value shift
    printf("The value of i = %d\n", &i);
    i = 0;
    printf("Enter the plain text: ");
    fgets(guy, 100, stdin);//takes user's input

    while (guy[i] != '\0'){ //while loop that runs until it reaches the end of the string

        if (i % 5 == 0 || i == 0){ //checks to see which character it is in the string, for instance the numbers 0,5,10,15,20 should all be added by 1
            guy[i] = guy[i] + 1;
        }

        if ((i - 1) % 5 == 0 || i == 1){ //all numbers that are second in the key word 'apple', such as 1,6,11,16
            guy[i] = guy[i] + 16;
        }
        if ((i - 2) % 5 == 0 || i == 2){// all numbers that are third to the key word 'apple' , such as 2,7,12,17,22
            guy[i] = guy[i] + 16;
        }
        if ((i - 3) % 5 == 0 || i == 3){// all numbers that are fourth to the key word 'apple', such as 3,8,13,18
            guy[i] = guy[i] + 17;
        }
        if ((i - 4) % 5 == 0 || i == 4){// all numbers that are fifth in the key word 'apple', such as 4,9,14,19
            guy[i] = guy[i] + 5;
        }
        else {
            i++;
        }
    }
    printf("Encrypted text is: %s\n", guy);
    getchar();
}

输出: -

输入纯文本:apple 加密文本为:bqqmf

i的值= 1900200 - 重新初始化之前的i值。

输入纯文本:apple 加密文本是:bÇÇ}