2013-11-22 3 views
0

다음 함수는 새 텍스트 파일을 만들고 사용자가 파일에 저장할 텍스트를 입력 할 수있게합니다. 해결해야 할 문제가있는 주요 문제는 1) 단어 사이에 공백을 허용하는 것 2) 입력을 치는 것은 줄 바꿈 대신 텍스트를 저장합니다.텍스트 입력 및 파일 저장

void new_file(void) 
{ 
    char c[10000];    
    char file[10000]; 
    int words; 
    printf("Enter the name of the file\n"); 
    scanf("%123s",file); 
    strcat(file,".txt"); 
    FILE * pf; 
    pf = fopen(file, "w"); 

    if (!pf) 
    fprintf(stderr, "I couldn't open the file.\n"); 

    else 
    { 
     printf("Enter text to be saved\n"); 
     scanf("%s", c);  
     fprintf(pf, "%s", c); 
    } 

    fclose(pf); // close file 
    printf("\n\nReturning to main menu...\n\n"); 
} 

답변

1

사용 fgets() 대신 scanf()는 사용자의 입력 텍스트를 얻을 수 있습니다. 이렇게하려면

그래서 다음 코드를 사용하여이 줄

scanf("%s", c); 

교체 :

if (NULL != fgets(c, sizeof(c), stdin)) 
{ 
    fprintf(pf, "%s", c); 
} 
else 
{ 
    if (0 != ferror(stdin)) 
    { 
    fprintf(stderr, "An error occured while reading from stdin\n"); 
    } 
    else 
    { 
    fprintf(stderr, "EOF was reached while trying to read from stdin\n"); 
    } 
} 

한 줄 위의 코드 주위에 루프를 넣어 더 많은 다음에 읽을 수있는 사용자를 허용하려면 . 이렇게하면 루핑을 중지하도록 프로그램에 지시하는 조건을 정의해야합니다.

다음 예는 단일 점 "."을 입력 할 때 줄에서 읽는 것을 중지합니다.

do 
{ 
    if (NULL != fgets(c, sizeof(c), stdin)) 
    { 
    if (0 == strcmp(c, ".\n")) /* Might be necessary to use ".\r\n" if on windows. */ 
    { 
     break; 
    } 

    fprintf(pf, "%s", c); 
    } 
    else 
    { 
    if (0 != ferror(stdin)) 
    { 
     fprintf(stderr, "An error occured while reading from stdin\n"); 
    } 
    else 
    { 
     fprintf(stderr, "EOF was reached while trying to read from stdin\n"); 
    } 

    break; 
    } 
} while (1); 
+0

''\의 n''가'scanf'에 대한 터미네이터로 사용됩니다 및 반환을 누르면. ''# '':'while (getchar! ='# ') ...'와 같이 다른 터미네이터는 필요하지 않습니까? –

+0

@BitFiddlingCodeMonkey : 좋은 지적입니다. 독서를 끝내기 위해 고전적인 "도트 - 엔터 (dot-enter)"풋을 사용하여 내 대답을 확장했습니다. – alk

+0

@alk hmm weird 나는 문장을 끝내더라도 다음 줄로 갈 수 있습니다. – user2692751