我想创建一个小的加密程序,我想从文件中读取字符,只需将i的当前值添加到字符中并将其存储在新文件中。
示例: abcd 应存储为 aceg
以下是代码段:
main()
{
int i=0,c;
char filename[30],o_filename[30];
FILE *file,*outfile;
printf("\nEnter filename:");
scanf("%s",&filename);
printf("\nEnter output filename : ");
scanf("%s",&o_filename);
if( ( (file = fopen(filename,"a"))==NULL) || ((outfile = fopen(o_filename,"a+"))==NULL))
printf("\nERROR - Cannot proceed");
else
{
c = 0;
while(c!=-1)
{
c = getc(file);
putc((c+i),outfile);
i++;
}
printf("\nEncryption Successful!\n");
}
getch();
}
上述程序的错误是什么?
答案 0 :(得分:1)
函数getc
返回int
,而不是char
。 EOF
无法表示char
。
将c
的类型更改为int
并在循环中针对EOF
进行测试。
要解决由marc发现的一个错误,你可以试试这个成语:
while ((c = getc(file)) != EOF)
答案 1 :(得分:1)
正如cnicutar所说,getc返回一个int,因此c
应该声明为int c
。
首先,正如cnicutar所说,您需要将c
与EOF
进行比较,即while (c != EOF)
。此外,当您循环浏览文件并结束时,会发生什么?在最后一次迭代中,c = getc(file)
将为EOF
,但您仍然将其用于putc(EOF+i,outfile)
。
尝试使用以下两种方法之一来解决此问题:
do {
c = getc(file);
putc(c+i, outfile);
i++;
} while (c != EOF);
或
c = getc(file);
while (c != EOF) {
putc(c+i, outfile);
i++;
c = getc(file);
}
修改
正如cnicutar指出的那样,最后一个片段可以使用常见的getc
成语进行压缩,如下所示:
while ((c = getc(file)) != EOF) {
putc(c+i, outfile);
i++;
}