2017-05-20 30 views
2

バイナリファイルで3つの名前を1行に書きたいとします。これを行う方法?例: 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つの言葉をしたい場合は?それを行う方法@

+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);ようなあなたの文字列を印刷した後。

関連する問題