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

cnicutar が指摘したように、getc は int を返すため、c宣言する必要がありますint c

まず、cnicutar が指摘したように、と比較cする必要があります。また、ファイルをループして最後に到達するとどうなりますか? 最後の反復では、になりますが、まだ使用しています。EOFwhile (c != EOF)c = getc(file)EOFputc(EOF+i,outfile)

これを修正するには、次の 2 つの方法のいずれかを試してください。

    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 に答える
1

この関数はではなく をgetc返します。で表すことはできません。intcharEOFchar

ctoのタイプを変更し、ループ内でintテストします。EOF

編集

マークによって発見された1つのエラーでオフを修正するには、次のイディオムを試すことができます:

while ((c = getc(file)) != EOF)
于 2012-08-12T12:36:20.633 に答える