#include <stdio.h>
#include <stdlib.h>
#define STR " .’:~*=&%#" //STR+0对应“ ”,+1=“.”,+2=“‘”以此类推
#define ROWS 20
#define LEN 30
void files1(FILE *fp,int file1[ROWS][LEN]); //把文件内容拷贝到数组中
void files2(int file1[ROWS][LEN]); //对失真问题进行特殊处理
void files3(int file1[ROWS][LEN], char file2[ROWS][LEN+1]); //把数字转换为图像
int main(int argc, const char * argv[])
{
int i,j;
int file1[ROWS][LEN];
char file2[ROWS][LEN+1];
FILE *fp,*fc;
//检查打开的文件
if((fp=fopen(argv[1], “r”))==NULL)
{
fprintf(stderr,“无法打开%s文件。\n”,argv[1]);
exit(1);
}
if((fc=fopen(argv[2], "w"))==NULL)
{
fprintf(stderr,"无法打开%s文件。\n",argv[2]);
exit(2);
}
files1(fp,file1);
files2(file1);
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
file2[i][j]=*(STR+file1[i][j]);
file2[i][j]='\0';
fprintf(fc,"%s\n",file2[i]); //输入到文件
printf("%s\n",file2[i]); //检查输入情况
}
//收尾,关闭文件
fclose(fp);
fclose(fc);
return 0;
}
void files1(FILE *fp,int file1[ROWS][LEN])
{
int i,j;
for(i=0;i<ROWS;i++)
for(j=0;j<LEN;j++)
while(fscanf(fp,"%d",&file1[i][j])!=1)
fscanf(fp,"%*c");
}
void files2(int file1[ROWS][LEN])
{
int files[ROWS][LEN]={0};
int i,j;
int u,d,r,l; //上下左右
u=d=r=l=0;
for(i=0;i<ROWS;i++)
for(j=0;j<LEN;j++)
{
files[i][j]=file1[i][j];
u=abs(file1[i][j]-file1[i-1][j])>1?1:0;
d=abs(file1[i][j]-file1[i+1][j])>1?1:0;
r=abs(file1[i][j]-file1[i][j-1])>1?1:0;
l=abs(file1[i][j]-file1[i][j+1])>1?1:0;
if(i==0)
u=0;
else if(i==19)
d=0;
else if(j==0)
r=0;
else if(j==29)
l=0;
//4个角
if(abs(file1[0][0]-d)>1 || abs(file1[0][0]-l)>1)
files[0][0]=(file1[0][0]+d+l)/3+0.5;
else if(abs(file1[19][0]-u)>1 || abs(file1[19][0]-l)>1)
files[19][0]=(file1[19][0]+u+l)/3+0.5;
else if(abs(file1[0][29]-d)>1 || abs(file1[0][29]-r)>1)
files[0][29]=(file1[0][29]+d+r)/3+0.5;
else if(abs(file1[19][29]-u)>1 || abs(file1[19][29]-r)>1)
files[19][29]=(file1[19][29]+u+r)/3+0.5;
//4条边
else if(abs(file1[0][j]-d)>1 || abs(file1[0][j]-r)>1 ||abs(file1[0][j]-r)>1)
files[0][j]=(file1[0][j]+d+r+l)/4+0.5;
else if(abs(file1[i][0]-u)>1 || abs(file1[i][0]-d)>1 ||abs(file1[i][0]-l)>1)
files[i][0]=(file1[i][0]+d+r+l)/4+0.5;
else if(abs(file1[19][j]-u)>1 || abs(file1[19][j]-d)>1 ||abs(file1[19][j]-r)>1)
files[19][j]=(file1[19][j]+d+r+l)/4+0.5;
else if(abs(file1[i][29]-u)>1 || abs(file1[i][29]-d)>1 ||abs(file1[i][29]-r)>1)
files[i][29]=(file1[i][29]+d+r+l)/4+0.5;
//剩下的
else if(abs(file1[i][j]-u)>1 || abs(file1[i][j]-d)>1 || abs(file1[i][j]-r)>1 ||
abs(file1[i][j]-l)>1)
files[i][j]=(file1[i][j]+u+d+r+l)/5+0.5;
}
for(i=0;i<ROWS;i++)
for(j=0;j<LEN;j++)
file1[i][j]=files[i][j];
}