用C语言中加密文件疑问?

#include<stdio.h>intmain(){charch;while((ch=getchar())!='\n'){if((ch>='a'&&ch<='z')||... #include <stdio.h>
int main ()
{
char ch;
while ((ch=getchar())!='\n')
{
if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='z'))
{
ch=ch-8;
if ((ch<'a'&&ch>='a'-8)||ch<'A') //这个代码是什么意思?请大侠详解!!!
ch=ch+26;
}
putchar (ch);

}
while ((ch=getchar())!='\n')
putchar (ch);
putchar ('\n');
}

上面这个代码想了很长时间,请大侠指点一下!!!
展开
 我来答
春天史努比
2014-09-11 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:112
采纳率:100%
帮助的人:63.3万
展开全部
因为字母对应的ascII码a-z为65-90, A-Z为97-122。这段代码的意思是将每个字母向后移8位即i(73)变为a(65),j(74)变为b(66),k(75)变为c(67)...,
回到你的问题,每个字母都递减会出现这样的问题:假如你输入的是b对应的ascII码为66,再减8就是58了,没有字母的ascII码为58(对应的符号为‘:’),这就会出现乱码。依次类推所有65+8=73和97+8=103以下的字母加密之后都是乱码形式出现的。为了避免这种情况,加了一个循环即26,这样例子中的b加密之后会变成66-8+26=84 即t。这样就能保证即使是加密,加密出来的字符也是在字母范围之内的
酷我P2Y
2014-09-11 · TA获得超过128个赞
知道答主
回答量:192
采纳率:83%
帮助的人:60.6万
展开全部
加密我不太懂,不过按照文件读写的顺序,我认为应该是:
1、询问要加密的文件。
2、根据文件名,打开文件。
3、往内存里读入文件内容,也就是在程序中用临时变量来接收这些内容。
4、用加密算法,处理那些从文件读取出来的数据。
5、把处理好的内容再重新写进目标文件。
这是文件加密步骤。
不过如果你的意思仅仅是给文件加个密码的话。。。。
fread和fwrite 一般用于二进制文件读写,因为它们的特性是按照“块”做单位来读写的,不需要考虑存储内容的格式(因为在内存中,无论是文本数据还是二进制数据,它们存储的都是二进制,这是内存存储的本质,明白这个很关键),而按“块”来读写,说的是按字节数来读写。
fprintf和fscanf,一般用于存储有格式要求的数据。比如说存储一个结构体,里面有整形和字符型等等。
需要补充的是,因为本质上,任何数据在内存里存储的形式都是二进制,所以像结构体这类自定义类型,也可以用fread和fwrite来读写,而这个“块”单位一般等于sizeof(struct)。
用fwrite存储二进制文件,用记事本打开是乱码,看起来不直观;用fprintf存储文本文件,用记事本打开是一般文字,很直观看得懂。所以一般练习都喜欢用fprintf。
这个问题可能不太好理解。不懂再追问呗。
是否可以解决您的问题?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2014-09-11 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6477万
展开全部
if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) //这里是判断字符ch是大、小写字母,你的第二个z写成了小写,应该大写
        {
            ch=ch-8; //对该字母做减8处理
            if ( (ch<'a'&&ch>='a'-8) || ch<'A' ) //对于前8个字母'a'-'h'| 'A'-'H'减8后,将不在大小写字母区间内,所以,会出现小于'a'  或小于'A'的情况,而达不到保持字母的模样,因此,对其进行加26的处理,让其对应到后8个字母的位置。  
            ch=ch+26;
        }
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
OnTheRoad1024
2014-09-11 · 超过14用户采纳过TA的回答
知道答主
回答量:25
采纳率:0%
帮助的人:29.1万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式