看看一段小程序啊!!帮忙拉!

dakula 2004-10-19 10:21:10
这是一个关于文件异或加密和解密的程序 为什么我运行时 到printf("........press'y'to decode presss.....")这里的时候就自动的运行完了整个程序 并没有在那里停留 让我输入c=getchar()这个东西啊!!

#include <conio.h>
#include<stdio.h>
#include<stdlib.h>
void main(int argc,char *argv[])
{
FILE *fp1,*fp2,*fp3;
char i,c,ch;
long j;
if (argc!=4)
{
printf("input files errors\n");
exit(0);
}
fp1=fopen(argv[1],"rb");
fp2=fopen(argv[2],"wb");
fp3=fopen(argv[3],"wb");
if (fp1==NULL || fp2==NULL|| fp3==NULL)
{
printf("cannot open file\n");
exit(1);
}
printf("please input passwords:");
scanf("%ld",&j);

ch=fgetc(fp1);
while(!feof(fp1))
{
c=rand();
ch=ch^j;
fputc(ch,fp2);
ch=fgetc(fp1);
}
printf("Encrypt have already completed, press 'Y' to decode press 'N' to quit :") ;
c=getchar();
if(c=='y'||c=='Y')
{
ch=fgetc(fp2);
while(!feof(fp2))
{

ch=ch^j;
fputc(ch,fp2);
ch=fgetc(fp3);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
exit(0);

}
else if(c=='n'||c=='N')
{
fclose(fp1);
fclose(fp2);
fclose(fp3);
exit(0);
}

}
...全文
130 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dakula 2004-10-21
  • 打赏
  • 举报
回复
#include <conio.h>
#include<stdio.h>
#include<stdlib.h>

void main(int argc,char *argv[])
{
FILE *fp1,*fp2,*fp3;
char c,ch,bh;
long j;
if (argc!=4)
{
printf("input files errors\n");
exit(0);
}
fp1=fopen(argv[1],"rb");
fp2=fopen(argv[2],"wb");
fp3=fopen(argv[3],"wb");
if (fp1==NULL || fp2==NULL|| fp3==NULL)
{
printf("cannot open file\n");
exit(1);
}
printf("please input passwords:");
scanf("%ld",&j);
getchar();
ch=fgetc(fp1);
while(!feof(fp1))
{

ch=ch^j;
fputc(ch,fp2);
ch=fgetc(fp1);
}
printf("Encrypt have already completed, press 'Y' to decode press 'N' to quit :") ;
c=getchar();
if(c=='y'||c=='Y')
{
bh=fgetc(fp2);
while(!feof(fp2))
{

bh=bh^j;
fputc(bh,fp3);
bh=fgetc(fp2);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
exit(0);

}
else if(c=='n'||c=='N')
{
fclose(fp1);
fclose(fp2);
fclose(fp3);
exit(0);
}

}

上面贴错了几个地方,我重新修改了一下!
dakula 2004-10-21
  • 打赏
  • 举报
回复
怎么没有人说点实际的啊!
qc_jrj 2004-10-20
  • 打赏
  • 举报
回复
程序本身就不要谈了,问题多的没法说。
snow810211 2004-10-20
  • 打赏
  • 举报
回复
我知道你这个程序有几个错误,看注释:
#include <conio.h>
#include<stdio.h>
#include<stdlib.h>
void main(int argc,char *argv[])
{
FILE *fp1,*fp2,*fp3;
char i,c,ch;
long j;
if (argc!=4)
{
printf("input files errors\n");
exit(0);
}
fp1=fopen(argv[1],"rb");
fp2=fopen(argv[2],"wb");
fp3=fopen(argv[3],"wb");
if (fp1==NULL || fp2==NULL|| fp3==NULL)
{
printf("cannot open file\n");
exit(1);
}
printf("please input passwords:");
scanf("%ld",&j);
getchar(); //这里要添加“getchar()”,相当于把scanf()最后的“回车”读了。
ch=fgetc(fp1);
while(!feof(fp1))
{
c=rand();
ch=ch^j;
fputc(ch,fp2);
ch=fgetc(fp1);
}
printf("Encrypt have already completed, press 'Y' to decode press 'N' to quit :") ;
c=getchar();
if(c=='y'||c=='Y')
{
ch=fgetc(fp2);
while(!feof(fp2))
{

ch=ch^j;
fputc(ch,fp2);//这里应该是“fputc(ch,fp3);”
ch=fgetc(fp3);//这里应该是“ch=fgetc(fp2);”
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
exit(0);

}
else if(c=='n'||c=='N')
{
fclose(fp1);
fclose(fp2);
fclose(fp3);
exit(0);
}

}

其他的错误我看没有了,但是程序本身有错误,关键是处理加密/解密的时候,用2进制那块~~~继续。。。。。
qc_jrj 2004-10-20
  • 打赏
  • 举报
回复
如果是vc的话用 c=_getch();
snow810211 2004-10-20
  • 打赏
  • 举报
回复
fp2=fopen(argv[2],"wb");

还有,这个好像应该写成"fp2=fopen(argv[2],"wb+");
"
kunpengzhi 2004-10-20
  • 打赏
  • 举报
回复
同意楼上的说法
在标准格式输入函数前后,最好调用
int fflush(FILE *stream);
清空输入流。
kobefly 2004-10-20
  • 打赏
  • 举报
回复
其实在scanf()函数使用的时候
如果读整数
会留个回车在输入缓存里
很容易出现问题
记得消除掉
lifan5748 2004-10-19
  • 打赏
  • 举报
回复
直接退出是因为程序并没有运行到getchar();可能在前面某个exit()退出了,好好检查一下前面的eixt()
dakula 2004-10-19
  • 打赏
  • 举报
回复
我编译啊什么都通过了,在我执行EXE文件的时候 程序运行完加密程序后直接结束了!!
wxfjog 2004-10-19
  • 打赏
  • 举报
回复
你是不是上面用错了什么符号了,以前我也有这类似情况,看一下吧,我不太懂,
davidhua2000 2004-10-19
  • 打赏
  • 举报
回复
学习!
davidhua2000 2004-10-19
  • 打赏
  • 举报
回复
只为占个一楼,希望也能给个分~

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧