2017-05-20 5 views
2

한 줄에 세 개의 이름을 이진 파일로 쓰고 싶습니다. 이 작업을 수행하는 방법? 예 : Ivan Petrov Petrov. 나는 단지 파일에 이반을 작성할 수 있습니다 이런 식으로바이너리 파일로 쓰기 C로 프로그래밍하기

char name[50]; 
int sizeName; 
FILE*fp; 
    if((fp=fopen("clients.bin","ab+"))==NULL) 
    { 
     printf("Error opening the file\n"); 
     exit(1); 
    } 
    printf("Enter client's name: \n"); 
    scanf("%s",name); 
sizeName=strlen(name); 
fwrite(&sizeName,sizeof(int),1,fp); 
fwrite(name,sizeName,1,fp); 

쓰기,하지만 난 3 개 단어를 원한다면? How do to do @

+1

'scanf()'는 공백이 발견 될 때까지 입력을받습니다. 스페이스가있는 문자열의 경우,'fgets()'를 사용하여 읽습니다. – Haris

+0

'fgets (name, sizeof name, stdin); 또는'scanf ("% 49 [^ \ n] % * c", name);' – BLUEPIXY

답변

2

문제는 입력을 읽는 방식에 있습니다. scanf()은 공백을 만지는 즉시 중지됩니다. 결과적으로 name은 "Ivan"만 저장합니다. fgets()을 사용하면 편리합니다.

변경이이에

scanf("%s",name); 

는 :

fgets(name, sizeof(name), stdin); // read the line (including the newline from the user's enter hit 
name[strlen(name) - 1] = '\0'; // overwrite the newline 

당신이 얻을해야합니다

Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c 
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out 
Enter client's name: 
Ivan Petrov Petrov 
Ivan Petrov Petrov 

을이 printf("%s\n", name);처럼 문자열을 인쇄 한 후.