最近突然やる気湧いたから、勉強しています。
とりあえずテキストファイルの読み書き方法を、ファイルを開く方法、閉じる方法みたいな当たり前なプログラムもちゃんと書いて実行することから始めた。
1文字入出力・・・fgetcで読み込んでfputcでファイルに書き込みみたいな。
1行入力・・・fgets で buff[hoge] に ファイルから読み込んで strstr()関数でそのファイル内に検索対象の文字列が含まれてるか調べる。とかやってみたり。
すぐ忘れるからたまに同じプログラムも打ち込み直してます。
ファイル操作や構造体にかんしては、本当に難しく感じていたけど、少しずつ見についてきて楽しくなって来ました。
データが記録できるようになると、今まで作ってきた、その場その場の計算プログラムだったりとかと違って、便利なものが作れるようになりますよね!
なんだかワクワクしてきたぞー!
ところで、サンプルプログラムをみてずっと思ってたのですが、
#include
#include
#define BUF_SIZE 1024
#define SEARCH_STR "int"
main()
{
FILE *rfp;
FILE *wfp;
char buff[BUF_SIZE];
rfp=fopen("src.txt","r");
if(rfp==NULL){
fprintf(stderr,"ファイルのオープンに失敗しました。\n");
exit(0);
}
wfp=fopen("dist.txt","w");
if(wfp==NULL){
fprintf(stderr,"ファイルのオープンに失敗しました。\n");
exit(0);
}
while(1){
if(fgets(buff,BUF_SIZE,rfp)==NULL){
break;
}
fputs(buff,wfp);
}
fclose(rfp);
fclose(wfp);
return 0;
}
このif文の条件…
fgets(buff,BUF_SIZE,rfp) == NULL
fgets(buff,BUF_SIZE,rfp) はストリーム(.txt)からBUF_SIZE 分の文字列を配列buff に読み込む。
で、もし返り値が NULL(終端ですよ~) だった場合、break!!!
と言うことはわかっていたものの、あくまでただの条件であって fgets 関数はその場でしか仕事してないと思ってました。
この条件文にしか fgets 無いし、ここで読み取ってるのですよね。
すごいなー if文すげ~!
do whlie みたい。 ちょっと違うか(笑)
このサンプルプログラムで最初 SEARCH_STR "int" って定義してるけど…
完全に一つ前のサンプルプログラムから消し忘れてるし。
(・∀・)ニヤニヤ