2011-11-16 7 views
1

사용자 (여러 줄)의 입력을 읽고 fputs()를 사용하여 파일에 쓰고 싶었습니다.fgets를 사용하여 사용자의 입력을 여러 줄 읽고 C에서 fputs를 사용하여 파일에 쓰는 방법?

여기, 내가 프로그램 (I 리눅스를 사용하고 있습니다)의 입력 프롬프트를 닫습니다 Ctrl + C를 사용하고 사용자의 입력을 받고 후 내 코드

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
FILE *fp; 
char s[25]; 
fp=fopen("myname","w"); 
if(fp==NULL) 
{ 
    perror("Error opening file\n"); 
    exit(1); 
} 

while(fgets(s,25,stdin)!=NULL) 
    fputs(s,fp); 
fclose(fp); 
return 0; 
} 

입니다. 그럼 내가 파일을 열면, 아무것도 들어 있지 않다. 어떻게 해결할 수 있을까요?

fputs() & fgets()의 사용에 문제가 있습니까?

+0

코드는 25 바이트 라인에서 깨질 것입니다. 당신은'fgets (s, sizeof (s) -1, stdin)'을 사용할 수 있고,'memeset (s, 0, sizeof (s)); 그리고 getline은 (라인을 동적으로 할당하기 때문에) 더 나은 함수입니다. –

+0

@BasileStarynkevitch,'fgets'의 man 페이지는'fgets()는 size 문자보다 작은 하나의 문자를 stream에서 읽어 들여서 s가 가리키는 버퍼에 저장합니다. '\ 0'은 버퍼의 마지막 문자 '라고합니다. 따라서'fgets()'호출에 25 개가있는 것이 안전합니다. 이 코드를 25 자보다 긴 행으로 테스트했습니다. 작동하지 않는 이유는 버퍼링입니다. 'fflush (fp)'를 추가하면 해결되었습니다. 후회에 대한 죄송합니다. – Bhaskar

답변

3

버퍼링으로 인해 C-C이 프로세스를 죽이기 때문에 많은 양의 버퍼가 채워지지 않으면 버퍼에 파일이 저장되지 않습니다.

당신은 C-D (UNIX) 또는 C-Z (도스),하지 C-C로 출력을 종료해야합니다.

보조 노트로 : fgets은 줄 바꿈을 제거하지 않으며 fputs은 자체를 추가합니다. 그러나 당신은 그것을 알게 될 것입니다 :-)

+0

고마워 친구, 네 말이 맞아. 이제 나는 적절한 출력을 얻는다. – Dinesh