[英]read/write with c from/in file
我想从文件中读取内容,然后在文件中的字符上加上/减去用户指定的数字。 用户还将决定程序是要添加还是减去。 我的问题是,我无法在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;
}
您可以在同一循环中对同一文件使用fgetc
和fputc
,但必须记住,在调用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.
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.