파일에서 읽은 다음 파일에있는 문자 (사용자가 지정한 숫자)에/빼기를 추가하고 싶습니다. 또한 사용자가 프로그램이 더하거나 뺄 것인지를 결정합니다. 내 문제는 내가 읽고 루프의 첫 번째 문자를 쓸 수 없다는 것입니다. 첫 번째 문자를 읽었지 만 이미 파일에 쓰여진 내용의 끝에 씁니다. 같은 루프에서 fgetc와 fputc를 사용할 수 없거나 메뉴를 통해 프로 시저를 다시 시작한 후 파일의 시작 부분에 * fp를 보내야한다고 생각합니다. 여기 파일에서 /로 C로 읽기/쓰기
코드입니다 :#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
을 사용할 수 있습니다
호기심 - 왜'대신 함수 호출의 goto' 사용할 수 있습니까? 나는 "스파게티 코드"에 대해 들어 본 적이 있지만 결코 구현 된 것을 보지 못했으며 이것을 결코하지 말라고 가르쳐 줬다. – ChiefTwoPencils
@ C.Lang Agree. 고토는 유명한 악입니다 –
다음과 같은 fseek를 사용할 수 있다고 생각합니다 –