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」だけを読み込んでくれるのかと思ったのですが、数値は正しく表示されません。
以上教えていただければ嬉しいです。
お礼
atoi関数なんて関数、全然知らなかったんですが、ネットで調べてなんとかチェック機能をつけることができました。 ところが、できると思っていた数字だけで構成されているのかというチェック機能がまだできていません・・・。 自分の勉強不足を痛感します。 というわけで、また新しい質問として、ここで質問したいと思います。 ありがとうございました。