파일 입출력 - 연습

goodjam92·2021년 8월 5일
0

C언어_공부

목록 보기
1/2

// 하고자 하는 의도
// 먼저 문자를 받아서 파일에 저장시켜 놓고
// 첫 번째 문장과 두 번째 문장 사이에 문장을 추가하려고 함.
// 내 생각은 먼저 첫째 줄의 줄바꿈 기호 위치를 찾기 위해 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"로 변경이 되었음.
// 추후엔 문장 사이에 추가하는 방법이 있는지 확인해보자.

profile
습관을 들이도록 노력하자!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN