编译时通过的,但是当我输入 massage 时就被强行停止了,是怎么回事呢?该如何修改?
/****************************************************************************功能:凯撒加密:把一条消息中的每个字母用字母表中固定距离之后 *
* 的那个字母来替代(如果越过字母Z,就绕回到字母表的起始位置。) *
*作者:W *
*时间:2014\04\ 27 *
* *
***************************************************************************/
#include <stdio.h>
#include <ctype.h>
#define SIZE 81
int main (void)
{
int n,i,j ; // n 表示加密时字母移动的数,i,j 循环变量
char ciphertext[SIZE];
char ch ;
printf("Enter a massage to be encrpted :");
while((ch = getchar())!=EOF) //遇到EOF时停止整个程序
{
while((ch = getchar())!='\n') // 读取字符,存储于数组ciphertext[SIZE]中
{
ciphertext[i] = ch ;
i ++ ;
}
printf("Enter shift amount :");
scanf("%d", &n);
if(n >= 1 && n <= 25)
{
for(j = 0 ; j < i ; j ++)
{
ch = isalpha(ciphertext[j]) ;
if( ch != 0 )
{
ch = ((ch - 'A')+n)%26 +'A' ;
putchar(ch);
}
else
putchar(ch) ;
}
}
else
{
for(j = 0 ; j < i ; j ++)
{
ch = isalpha(ciphertext[j]) ;
if( ch != 0 )
{
ch = ((ch + 'A')+n)%26 -'A' ;
putchar(ch);
}
else
putchar(ch) ;
}
}
printf("Enter a massage to be encrpted :");
}
return 0 ;
}
此题原来的题目:
有种古老的加密技术是凯撒加密,这种加密方法是把一条消息中的每个字母用字母表中固定距离之后的那个字母来替代(如果越过字母Z,就绕回到字母表的起始位置。)
编写程序,用凯撒加密方法对消息进行加密。用户输入待加密的消息和移位计数(字母移动的位置数目, 可取1,2,3….25)
当用户输入26与移位计数的差时,程序可以对消息进行解密。
提示:假定用户消息不超过80个字符。不是字母的字符不用更改。加密时不改变字母的大小写。为了解决绕回问题,可用表达式:
((ch – ‘A’) + n) % 26 + ‘A’ 计算大写字母的密码,其中ch存储字母,n存储移位计数(小写字母类似)