c语言写的简单加密程序,看下哪儿错了

//实现如下
FILE *fp;
char data;
if((fp=fopen("D:\test.txt","r+"))==NULL)
{
printf("文件打开失败!");
exit(1);
}
data=fgetc(fp);
while(!feof(fp))
{
data=data^0x18;//加密原理,四五位取反
fseek(fp,-1,1);//回退一个字节
fputc(data,fp);//将加密后的字节写入文件
data=fgetc(fp);//取出下一个代加密,字节
}
fclose(fp);

您的问题已经解决,我先将源码贴出来,然后讲解一下思路。

#include <stdio.h>

#include

int main()
{
//实现如下
FILE *fp = NULL;
char data, t;
if((fp=fopen("d:test.txt","r+"))==NULL)
{
printf("open file error!");
exit(1);
}

do
{
    data=fgetc(fp);
    t = data ^ 0x18;        //加密原理,四五位取反
    fseek(fp,-1,SEEK_CUR);  //回退一个字节
    fputc(t,fp);            //将加密后的字节写入文件
    fseek(fp, 0,SEEK_CUR);
    printf("%c", data);
}while(data != EOF);

fclose(fp);
return 0;

}

//abcdefghijklmnopqrstuvwxyz

关键在于:
data是用于获取字符,如果直接对其进行运算可能出现一些特殊的字符,这些字符可能会引起死循环。
另外,使用fseek进行回退后,应该使指针回到原处,这一点特别注意,这样才能保证不会出现死循环,最的字符是测试用例,在我的电脑上已经通过测试,希望能帮助到您!