c语言输出字符串,一开始是乱码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *infile,*outfile; //文件声明
char filename[20],c[100],p[100],order[26];
int i,j,k,count,temp,b[27][2];

printf("请输入要打开的文件名:\n");
gets(filename);
infile=fopen(filename,"r"); //打开指定文件读取
if(infile==NULL)
{
printf("打开文件失败\n"); //提示文件打开不成功
exit(1);
}
fgets(c,100,infile);
puts(c);
fclose(infile); //关闭文件

count=strlen(c); //对密文长度进行计数
for (i=0;i<26;i++) //统计密文中字母出现频率并排序
{
b[i][0]=(i+65);
b[i][1]=0;
}
for (i=0;i<count;i++)
{
for (j=0;j<26;j++)
{
if ((int)c[i]==(65+j))
b[j][1]=b[j][1]+1;
}
}
for (i=0;i<26;i++)
{
for (j=0;j<26-i;j++)
{
if (b[j][1]<b[j+1][1])
{
temp=b[j][0];
b[j][0]=b[j+1][0];
b[j+1][0]=temp;
temp=b[j][1];
b[j][1]=b[j+1][1];
b[j+1][1]=temp;
}
}
}
printf("得到的序列为:\n");
for (i=0;i<26;i++)
{
order[i]=(char)b[i][0]; //排序后的字母顺序存入新的字符串
printf("%c",order[i]);
}
printf("\n秘钥为:\n");
k=abs((order[0]+32)-'e'); //求出偏移量
printf("\n%d\n",k);

for(i=0;c[i]!='\0';i++) //将密文还原为明文
{
if(c[i]>='A'&&c[i]<='Z')
p[i]=abs(c[i]-'A'-k)+'a';
else c[i]='?';
}

printf("明文:\n%s\n",p);

return 0;

}

先从一个文件中读取,然后对里面的大写字母按照出现的次数进行排序,到了输出它们的顺序的时候就出现乱码了。之后的就都悲剧了。。。。。。
我是新手啊,求问这个乱码是什么鬼,怎么改啊!!
如果能解决问题的话加悬赏

第1个回答  推荐于2016-03-16
for (i=0;i<26;i++)
{
for (j=0;j<26-i-1;j++) //这里改一下先本回答被提问者采纳
相似回答