fscanf関数について
--------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE*fp;
int ch,dt;
char ss[80];
if((fp=fopen("bbb.txt","w"))==NULL){
printf("出力ファイルをオープンできません.\n");
exit(1);
}
fprintf(fp,"%c",'A');
fprintf(fp,"%s\n","abcdeABCDE");
fprintf(fp,"%d\n",1234);
fclose(fp);
if((fp=fopen("bbb.txt","r"))==NULL){
printf("入力ファイルをオープンできません.\n");
exit(1);
}
ch=fgetc(fp);
printf("ch=%c\n",ch);
fscanf(fp,"%s",ss);
printf("ss=%s\n",ss);
fscanf(fp,"%d",&dt);
printf("dt=%d\n",dt);
fclose(fp);
return 0;
}
--------------------------------------------------
以上のプログラムで、プログラムの通り「bbb.txt」は、
AabcdeABCDE
1234
となっております。
そこで疑問なのですが、「ch=fgetc(fp);」は1文字読み込みなので、'A'だけと分かるのですが、「fscanf(fp,"%s",ss);」はfpからの読み込みで何故、
AabcdeABCDE
1234
の全部を読み込まず、'A'を抜かした、「abcdeABCDE」だけを読み込んでくれるのか?
後、「fscanf(fp,"%d",&dt);」は何故「AabcdeABCDE」を抜かした、「1234」だけを読み込んでくれるのかが分かりません。
「fscanf(fp,"%d",&dt);」については数値だけを読み込んでくれるのかと思い、
ch=fgetc(fp);
printf("ch=%c\n",ch);
fscanf(fp,"%s",ss);
printf("ss=%s\n",ss);
の部分を無くせば、「1234」だけを読み込んでくれるのかと思ったのですが、数値は正しく表示されません。
以上教えていただければ嬉しいです。
お礼
>fscanf(input,"%4c",(char *)(&data)) ; 区切り幅を数値で指定できるんですね。。。勉強になります。 ご指摘の通り、実際はfreadの方が良いとは思うんですが、 勉強がてらfscanfでのやり方も知っておきたかったので質問させていただきました。 初歩的な質問でしたが、素早いご返答ありがとうございました!