用c从/in文件读/写

  • 本文关键字:文件 in file
  • 更新时间 :
  • 英文 :


我想从文件中读取,然后在文件中添加/减去字符,这是用户给出的数字。此外,用户还可以决定程序是进行加减运算。我的问题是,我不能读写for循环中的第一个字符。我读取第一个字符,但我在文件中已经写入的内容的末尾写入。我猜我不能在同一个循环中使用fgetc和fput,或者我需要在过程重新启动后(通过菜单)将*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 choicen1.Addn2.Subn3.Exitn");
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;

}

您可以在同一循环中为同一文件使用fgetcfputc,但是您必须记住,在调用fgetc后,文件指针位于下一个字符,以便fputc调用将写下一个字符而不是刚刚读取的字符。当然,fputc也会增加文件指针,导致你每隔一个字符就读写一次。

如果你想覆盖你刚刚读到的字符,你必须使用fseek来后退一步。

我认为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.
}
}

相关内容

  • 没有找到相关文章

最新更新