// 하고자 하는 의도
// 먼저 문자를 받아서 파일에 저장시켜 놓고
// 첫 번째 문장과 두 번째 문장 사이에 문장을 추가하려고 함.
// 내 생각은 먼저 첫째 줄의 줄바꿈 기호 위치를 찾기 위해 while문 작성
// while문으로 몇 번째 위치에 \n가 있는지 보고, 그 수를 카운트
// 카운트 된 수를 fseek 함수에 적용하여 파일 위치지정자를 옮겨놓고
// 추가할 내용을 입력하여 파일에 출력하게되면 첫 째줄과 둘 째줄 사이에 문장이 추가되지 않을까 함.
// 만약 추가가 되어도 줄바꿈이 되지않으면 줄바꿈을 넣어주어야 하는지
// 내 생각엔 파일 위치 지정자 카운트를 +1을 하면 될 것 같음.
// abcd\n 이라면 0 1 2 3 4 5 5번의 위치에 있으니 그 이후로 지정자를 옮겨서 작성하면 되지 않을까 함.
int main()
{
FILE* te;
if ((te = fopen("abc.txt", "w+")) == NULL)
{
exit(EXIT_FAILURE);
}
char c[100] = { '\0' };
while ((fscanf(stdin, "%s", c) == 1) && (c[0] != '.'))
fprintf(te, "%s\n", c); //파일에 내용 저장
rewind(te);
while ((fscanf(te, "%s", c) == 1))
fprintf(stdout, "%s\n", c); // 파일에 저장된 내용 출력
fclose(te);
// 여기부터 1라인과 2라인 사이에 문장을 추가하기 위한 내용
{
FILE* ae;
if ((ae = fopen("abc.txt", "r+")) == NULL)
{
exit(EXIT_FAILURE);
}
char cn[10] = { '\0' };
long space = 0;
while (fgetc(ae) != '\n')
{
space++;
}
printf("%d\n", space);
fflush(stdin);
//fgets(cn, 10, stdin); // fgets가 무시됨.. 왜 그럴까
fscanf(stdin, "%s", cn); //fscanf로 해결
fseek(ae, space, SEEK_SET);
fprintf(ae, "\n%s", cn);
//fputs(cn, ae);
fclose(ae);
}
return 0;
}
// 1번째 라인과 2번째 라인 사이에 문장 추가 할 때 파일을 여는 방법에 따라
// "a"로 열고 작업하면 fseek과 상관없이 그냥 맨 뒤에 추가 됨.
// "w"로 열고 작업하면 '\n' 나오는 곳을 찾기 위한 카운트가 무한루프로 돌게 됨.. 쓰는 것으로 파일을 열었으니 공간이 무한한상태처럼 나오는 듯
// "r"로 열고하면 기존에 작성 된 것을 읽어들이고 카운트한다
// 그리고 문장과 문장 사이에 추가는 못하였지만 교체를 할 수 있음
// 2번째 문장이 "bbbb"였다면 "aaaa"로 변경이 되었음.
// 추후엔 문장 사이에 추가하는 방법이 있는지 확인해보자.