0

ファイルから読み取り、ファイル内の文字(ユーザーが指定した番号)に追加/減算したい。また、ユーザーはプログラムが加算するか減算するかを決定します。私の問題は、forループの最初の文字を読み書きできないことです。最初の文字を読みましたが、ファイルにすでに書き込まれている文字の最後に書き込みます。同じループでfgetcとfputcを使用できないか、プロシージャの再起動後に(メニューを介して)ファイルの先頭に*fpを送信する必要があると思います。

コードは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char str[50],keystr[50],*p,c;
FILE *fp;
int i,k,key,buff1,buff2,choice;

start:

printf("Make a choice\n1.Add\n2.Sub\n3.Exit\n");
scanf("%d",&choice);
if(choice==3) goto end;
getchar();
printf("\nGimme the key");
fgets(keystr,50,stdin);

key=0;
i=0;

while(keystr[i])
{
    key=key+keystr[i];
    i++;
}
printf("\n%d",key);
printf("\nDwste onoma arxeiou");
fgets(str,50,stdin);

fp=fopen(str,"r+");
if (fp==NULL) printf("error");
buff1=0;
buff2=0;
for(;;)
{
    if((c=fgetc(fp))==EOF) break;
    buff1=c;
    if(choice==1)
    {
            buff1=buff1+key;
            c=buff1;
            fputc(c,fp);
            printf("\n%d",buff1);
    }
    else if(choice==2)
    {
            buff1=buff1-key;
            c=buff1;
            fputc(c,fp);
            printf("\n%d",buff1);
    }
}
goto start;
end:
fclose(fp);
printf("\nBye");
    return 0;

}

4

2 に答える 2

2

fgetc同じループ内で同じファイルに対してとを使用できますが、ファイル ポインターを呼び出した後は次の文字に配置されるため、呼び出しによって読み取った文字ではなく次の文字が上書きさfputcれることを覚えておく必要があります。もちろん、ファイル ポインタも増加するため、1 文字おきに読み書きする必要があります。fgetcfputcfputc

今読んだ文字を上書きしたい場合は、 を使用fseekして位置を 1 ステップ巻き戻さなければなりません。

于 2013-01-10T18:22:43.430 に答える
1

fseekは次のように機能すると思います。

int opr =0;
for (;;)
{
fseek(fp,opr,SEEK_SET)
if((c=fgetc(fp))==EOF) break;
buff1=c;
if(choice==1)
{
        buff1=buff1+key;
        c=buff1;
        fseek(fp,opr,SEEK_SET); 
        fputc(c,fp);
        printf("\n%d",buff1);
        opr++:
}
else
{
 ....  //Similarly for else loop.
}
}
于 2013-01-10T18:39:03.830 に答える