搜索
查看: 692|回复: 6
打印 上一主题 下一主题

求助

[复制链接]
跳转到指定楼层
楼主
发表于 2014-4-26 18:23:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
我要程序将输入的一组数据加密
然后输出到fp.txt中
最后解密数据,输出到fp2.txt
程序两次输出都是乱码

#include<stdio.h>
main()
{
FILE *fp;
printf("passwd:");
char old[16];
scanf("%s",&old);
int num;
char new[16];
for(num=0;num<=15;num++)
{
new[num]+=old[num]+100;
}
fp=fopen("fp.txt","w");
fprintf(fp,"%s",new);
fclose(fp);
FILE *fp2;
fp2=fopen("fp2.txt","w");
char uuu[16];
for(num=0;num<=15;num++)
{
uuu[num]=new[num]-100;
}
fprintf(fp2,"%s",uuu);
fclose(fp2);
system("pause");
}

沙发
发表于 2014-4-26 20:18:37 | 只看该作者
最要紧的问题
scanf("%s",&old);
应该是
  1. scanf("%s", old);
复制代码


for(num=0;num<=15;num++)
num<=15就把整个数组里的东西都拷贝过去了
而且休止字符也会被后面的加密处理
应该写
  1. for(num=0; old[num]; ++num);
复制代码

然后再补上休止字符
new[num] = '\0';

new[num]+=old[num]+100;
你没有初始化new,那么在new上面做+=很可能就是乱码
另外, +100很可能就是不可打印的字符,或者跑到字符表外面去了
为了简单,姑且写
  1. new[num] = old+1;
复制代码


后面的同样也要改
  1. for(num=0;old[num];num++){
  2.     uuu[num]=new[num]-1;
  3.   }
  4. uuu[num] = '\0';
复制代码
板凳
发表于 2014-4-26 20:22:23 | 只看该作者
还有一些不是那么紧要的问题

你定义的函数是
main()
这是C90才容许的写法

但是
scanf("%s",&old);
int num;
一条statement后有一句declaration,这是C99以及以后才允许的写法

所以这段程序不符合任何C标准

最后一个风格上的问题,你的一个变量名是new,new在C++里是关键字,用C++编译器就不能编译了
不符合所谓clean C的风格
地板
发表于 2014-4-26 20:26:16 | 只看该作者
本帖最后由 rosynirvana 于 2014-4-26 20:27 编辑

改好后的代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.   FILE *fp, *fp2;
  6.   char old[16], enc[16], dec[16];
  7.   int num;

  8.   printf("passwd:");
  9.   scanf("%s",old);

  10.   for(num=0;old[num];num++)
  11.     enc[num] = old[num] + 1;
  12.   enc[num] = '\0';
  13.   
  14.   fp=fopen("fp.txt","w");
  15.   fprintf(fp,"%s",enc);
  16.   fclose(fp);

  17.   fp2=fopen("fp2.txt","w");
  18.   for(num=0;old[num];num++)
  19.     dec[num] = enc[num] - 1;
  20.   dec[num] = '\0';
  21.   fprintf(fp2,"%s",dec);
  22.   fclose(fp2);

  23.   system("pause");
  24.   return 0;
  25. }
复制代码

点评

Good,Thanks  发表于 2014-4-27 06:18
5#
 楼主| 发表于 2014-4-27 10:50:29 | 只看该作者

for(num=0;old[num];num++)
是什么意思
6#
发表于 2014-4-27 12:09:50 | 只看该作者
javaC 发表于 2014-4-27 10:50
for(num=0;old[num];num++)
是什么意思

for(num=0; old[num] != '\0'; num++)
事实上'\0'就是0,为了强调是一个字符,所以写成'\0'
所以只要写old[num],就可以当作终止条件了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表