0

我只想创建一个小型加密程序,我想从文件中读取字符并将 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();
}

上述程序有什么错误?

4

2 回答 2

1

这个函数getc返回一个int,而不是一个charEOF不能在 a 中表示char

在循环中更改cto的类型int并进行测试。EOF

编辑

要纠正 marc 发现的一个错误,您可以尝试以下成语:

while ((c = getc(file)) != EOF)
于 2012-08-12T12:36:20.633 回答
1

正如 cnicutar 所指出的,getc 返回一个 int,因此c应该声明为int c.

首先,正如 cnicutar 所指出的,您需要比较c,EOFwhile (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++;
    }
于 2012-08-12T12:50:07.080 回答