这个程序中的若干错误和警告 该怎么改? P:虽有编译器提示 但我还是无能为力
//多表代换加密.#include <stdio.h>
#include <string.h>
#define lETTERS_NUMBER 26
char table[26][26]; //全局变量
void main ()
{
char multi_table (char ); //制表的函数
char enter_plaintext_key_word (char , char ); //输入明文、密钥词的函数.
char indentation_plaintext (char ); //缩进__删除明文中的所有空格,使明文变成一连串的字符的函数.
char repeat_key_word (char , char ); //重复密钥词的函数.
char encrypt (char , char , char , char ); //加密的函数.
char export_ciphertext (char ); //输出密文的函数.
multi_table (table[26][26]);
enter_plaintext_key_word (plaintext[50], key_word[20]);
indentation_plaintext (plaintext[50]);
repeat_key_word (key_word[20], key[50]);
encrypt (key[50], plaintext[50], table[26][26], ciphertext[50]);
export_ciphertext (ciphertext[50]);
}
char multi_table (char table[26][26])
{
int i = 0, j = 0;
char z = 'A';
for (i = 0; i < lETTERS_NUMBER; i++)
{
for (j = 0, z = 'A'; j < lETTERS_NUMBER, z <= 'Z'; j++, z++)
{
table[i][j] = (z - 'A' + i) % lETTERS_NUMBER + 'A'; //同凯撒密码移位规律,对各个表中的字母移位进行制表.
}
}
printf (" 注 : 行为明文对应的字母,列为密钥对应的字母\n");
printf ("***************************************Table***********************************\n");
for (i = 0; i < lETTERS_NUMBER; i++)
{
for (j = 0; j < lETTERS_NUMBER; j++)
{
printf ("%3c", table[i][j]);
}
printf ("\n");
}
}
char plaintext[50]; //明文.(局部变量)
char key_word[20]; //密钥词.(局部变量)
char enter_plaintext_key_word (char plaintext[50], char key_word[20])
{
printf ("\n输入一段不超过50个字符(包括空格)的明文\n(字符中字母需小写且字符中不包括标点符号) : \n");
gets (plaintext);
printf ("输入密钥词 (每个字母需小写) : \n");
gets (key_word);
}
char indentation_plaintext (char plaintext[50])
{
int i = 0, j = 0;
while (plaintext[i] != '\0') //进行while中的语句直到plaintext中删除完所有空格.
{
if (plaintext[i] == 32) //32 代表 空格字符的ASCLL码值.
{
for (j = i; plaintext[j] != '\0'; j++)
{
plaintext[j] = plaintext[j+1]; //使空格后的所有字符前移一位.
}
}
i++;
}
}
char key[50]; //密钥.(局部变量)
char repeat_key_word (char plaintext[50], char key_word[20], char key[50])
{
int i = 0;
int plaintext_length = strlen (plaintext);
int key_word_length = strlen (key_word);
for(i = 0; i < plaintext_length; i++)
{
key[i] = key_word[i % key_word_length]; //运用此规律可将key_word重复和plaintext_length相同的相应字符给key.
}
/* 次效率代码 :
int i = 0;
int repeat_frequency_integer = 0; //需重复key_word的整数倍.
int repeat_frequency_remainder = 0; //需重复key_word的余数个数.
repeat_frequency_integer = strlen (plaintext) / strlen (key_word);
if (repeat_frequency_integer == 0) //若plaintext是key_word的整数倍,则使用字符串处理函数连接key_word的倍数的次数.
{
for (i = 0; i < repeat_frequency_integer; i++)
{
strcat (key, key_word);
}
}
else //若plaintext非key_word的整数倍,则重复上一个for循环中的语句后加上余出的字符个数对应的key_word的字符.
{
for (i = 0; i < repeat_frequency_integer; i++)
{
strcat (key, key_word);
}
repeat_frequency_remainder = strlen (plaintext) % strlen (key_word);
for (i = 0 ; i < repeat_frequency_remainder; i++)
{
key[strlen (key)] = key_word[i];
}
}
*/
}
char ciphertext[50]; //密文.(局部变量).
char encrypt (char key[50], char plaintext[50], char table[26][26], char ciphertext[50])
{
int i = 0, j = 0;
int z = 0;
int key_length = strlen (key);
for (z = 0; z < key_length; z++)
{
/*
若key[z]的ASCLL码值为100,其在明文表中的字母序列为第4个即"d";
则key[z+1]的ASCLL码值为101,其在明文表中的字母序列为第5个即"e";
则key[z+2]的ASCLL码值为102,其在明文表中的字母序列为第6个即"f".
因此得规律:
100 - 4 = 96
101 - 5 = 96
102 - 6 = 96
所以将key[z] - 96得key在表中的字母序列号,
又因为变量z的初值为"0",因此需将"key[z] - 96" - 1.
plaintext[z]的规律同key[z].
*/
i = key[z] - 96 -1; //计算出key中每个字符对应的下标.
j = plaintext[z] - 96 - 1; //计算出plaintext中每个字符对应的下标.
ciphertext[z] = table[i][j]; //将table中的所对应的每个字母赋予ciphertext.
}
}
char export_ciphertext (char ciphertext[50])
{
printf ("密文 : \n");
puts (ciphertext);
printf ("\n");
}
在错误中有以下三种类别的
错误 18 error C2065: “ciphertext”: 未声明的标识符 c:\users\administrator\documents\visual studio 2010\projects\hou_vs2010\hou_vs2010\min0.c 21
错误 2 error C2109: 下标要求数组或指针类型 c:\users\administrator\documents\visual studio 2010\projects\hou_vs2010\hou_vs2010\min0.c 18
错误 20 error C2198: “encrypt”: 用于调用的参数太少 c:\users\administrator\documents\visual studio 2010\projects\hou_vs2010\hou_vs2010\min0.c 21
在警告中有一种类别的加一个其它的
警告 24 warning C4028: 形参 1 与声明不同 c:\users\administrator\documents\visual studio 2010\projects\hou_vs2010\hou_vs2010\min0.c 26
警告 30 warning C4029: 声明的形参表不同于定义 c:\users\administrator\documents\visual studio 2010\projects\hou_vs2010\hou_vs2010\min0.c 82