그러면 파일에 \'1엔터2엔터\' 해서 해바바. 그리고 어지간 하면 rt 대신에 rb 로 열어라.. 그게 좀더 명확하다.
iljeomobolt(rntjr)2012-02-28 16:10
추가한글 보니까.. feof 가 끝을 검출 못한 모양인갑다. 그냥 수정한 형태로 써.. feof 따위는 기억속에서 지우고.. ㅎ
iljeomobolt(rntjr)2012-02-28 16:11
1엔터2엔터 하니까 1 2 2 이런식으로 2만 두번찍힘.. 그냥 수정한형태로 써야할듯
12(59.12)2012-02-28 16:21
횽 말대로 해봤는데요.. while이 세번돌아가는동안 str안의 값이 1 , 2, 2 이렇게 변하는데.. 이게 어떤 의미인지 모르겠음;
12(59.12)2012-02-28 17:17
잠시만요 생각좀...
12(59.12)2012-02-28 17:25
마지막에 빈 엔터때문에 한번 더 돈다는게 이해가 안감.. while 두번째 돌때 fgets가 \n까지 읽으니까 2\n을 읽어서, 읽는순간 파일위치지시자가 eof 가리키기때문에 while문에 걸려서 나와야하는게 아님? 첫번째 while에서 1\n읽고 두번째 while에서 2\n 읽고 세번째에서 eof때문에 빠져나온다 가 제 생각이었는데
12(59.12)2012-02-28 17:28
두번째 돌때 str 안에 보니까 2\n가 들어있는것같은데..
12(59.12)2012-02-28 17:30
그냥 좀 귀찮다..마지막으로 char* temp = fgets(str, sizeof(str), fp);이렇게 하고 temp의 포인터값의 변화를 보세요..마지막에 null이 들어감..그말은 아무것도 str에 쓰여지지 않는다는거임...fgets의 반환값이 char*인데..그러니까 str이 그냥 또 한번 출력된다는말임..맨 마지막에 아무것도 없기 때문에..그래서 보통은 while(1){if(feof(fp) != 0){break;} 이렇게 앞에서 빠져나감..아니면 if(fgets(str, sizeof(str), fp) == null){ break;} 이런식으로 바꾸고 빠져나가고요..이런것까지 다 설명해야되나..ㅡㅡ;;하여튼 님이 뭔가 착각하나본데..마지막 문장에서 조사식에서 보면 str은 안바뀜...바뀔때만다...
복근키보드(182.213)2012-02-28 18:07
3번째 돌때 fgets가 NULL을 리턴해서 2번째 돌때 str에 저장되있던게 한번 더 출력되는건 이해가 가는데요.. 왜 굳이 3번째까지 돌아야 하는게 이해가 안됨.. 2번째 돌때 fgets 후에 ftell로 파일위치지시자가 어디가리키고 있나 확인해보니까 파일 끝을 가리키던데.. 그럼 세번째 while문에서 !eof가 0이니까 3번째는 안돌고 빠져나와야 하는게 아님? 아! 내가 이해 못했다!
12(59.12)2012-02-28 18:20
while(feof) 를 while(1) { if(feof)} 로 바꾸니까 2번만 돌고 빠지네요 아 왜이러지
12(59.12)2012-02-28 18:24
바뀔때마다 빨간색으로 값이 변하는데..마지막은 안바뀐다는말임...마지막 while문 돌때 str값이 그대로 남아있기 때문에..그냥 printf문에서 그전에 남아있던 str값이 한번더 출려되는거일뿐..그러니까 while문 들어가서 시작할때 memset(str,0,100);해줘서 초기화 해주면 됨..또 저거 못쓴다고 한다면 include<string.h>하면됨..이게 끝임..진짜 저 많은 방법중 한가지만 써도되는데..하여튼..-_-;;난 여기까지임..
그러면 파일에 \'1엔터2엔터\' 해서 해바바. 그리고 어지간 하면 rt 대신에 rb 로 열어라.. 그게 좀더 명확하다.
추가한글 보니까.. feof 가 끝을 검출 못한 모양인갑다. 그냥 수정한 형태로 써.. feof 따위는 기억속에서 지우고.. ㅎ
1엔터2엔터 하니까 1 2 2 이런식으로 2만 두번찍힘.. 그냥 수정한형태로 써야할듯
횽 말대로 해봤는데요.. while이 세번돌아가는동안 str안의 값이 1 , 2, 2 이렇게 변하는데.. 이게 어떤 의미인지 모르겠음;
잠시만요 생각좀...
마지막에 빈 엔터때문에 한번 더 돈다는게 이해가 안감.. while 두번째 돌때 fgets가 \n까지 읽으니까 2\n을 읽어서, 읽는순간 파일위치지시자가 eof 가리키기때문에 while문에 걸려서 나와야하는게 아님? 첫번째 while에서 1\n읽고 두번째 while에서 2\n 읽고 세번째에서 eof때문에 빠져나온다 가 제 생각이었는데
두번째 돌때 str 안에 보니까 2\n가 들어있는것같은데..
그냥 좀 귀찮다..마지막으로 char* temp = fgets(str, sizeof(str), fp);이렇게 하고 temp의 포인터값의 변화를 보세요..마지막에 null이 들어감..그말은 아무것도 str에 쓰여지지 않는다는거임...fgets의 반환값이 char*인데..그러니까 str이 그냥 또 한번 출력된다는말임..맨 마지막에 아무것도 없기 때문에..그래서 보통은 while(1){if(feof(fp) != 0){break;} 이렇게 앞에서 빠져나감..아니면 if(fgets(str, sizeof(str), fp) == null){ break;} 이런식으로 바꾸고 빠져나가고요..이런것까지 다 설명해야되나..ㅡㅡ;;하여튼 님이 뭔가 착각하나본데..마지막 문장에서 조사식에서 보면 str은 안바뀜...바뀔때만다...
3번째 돌때 fgets가 NULL을 리턴해서 2번째 돌때 str에 저장되있던게 한번 더 출력되는건 이해가 가는데요.. 왜 굳이 3번째까지 돌아야 하는게 이해가 안됨.. 2번째 돌때 fgets 후에 ftell로 파일위치지시자가 어디가리키고 있나 확인해보니까 파일 끝을 가리키던데.. 그럼 세번째 while문에서 !eof가 0이니까 3번째는 안돌고 빠져나와야 하는게 아님? 아! 내가 이해 못했다!
while(feof) 를 while(1) { if(feof)} 로 바꾸니까 2번만 돌고 빠지네요 아 왜이러지
바뀔때마다 빨간색으로 값이 변하는데..마지막은 안바뀐다는말임...마지막 while문 돌때 str값이 그대로 남아있기 때문에..그냥 printf문에서 그전에 남아있던 str값이 한번더 출려되는거일뿐..그러니까 while문 들어가서 시작할때 memset(str,0,100);해줘서 초기화 해주면 됨..또 저거 못쓴다고 한다면 include<string.h>하면됨..이게 끝임..진짜 저 많은 방법중 한가지만 써도되는데..하여튼..-_-;;난 여기까지임..
@_@ 먼말이니