|
分類:[.NET 全般]
初めまして、以下のプログラムを友人に教わりながら作ったのですが、何をやっていたのかいまいちわかっていません(^^;)。なので注釈も変だと思いますが・・。このプログラムを見ていったいなにをやっているのかわかりやすく説明していただけるとうれしいです。baron.pgmは画像でした。
/* 任意のpgmファイルからヘッダファイルを読み込み、その情報を出力するプログ ラムを作成する。 使用するpgmファイルについては適当にirfanviewを使用して作成する。 */
#include <stdio.h>/*ライブラリ関数であるprintfやputsなどの関数原型宣言は<stdio.h>の中で宣言されている。*/
int main(void)/*main関数を宣言する*/ { FILE *pgm;/*pgmファイルを用意する*/ FILE *txt;/*txtファイルを用意する*/ int shikibetu;/*shikibetu関数を用意する*/ int x ;/*x 関数を用意する*/ int y ;/*y 関数を用意する*/ int kido;/*kido関数を用意する*/ char moji[256];/*charは0〜255文字を扱う*/
pgm = fopen("baron.pgm","rb");/*pgmファイルはbaron.pgmを読み込みで開く*/ if(pgm == NULL){ /*もしpgmファイル開けないなら*/ printf("\aファイルをオープンできません\n");/*pgmファイルを開けない時警報が鳴りファイルを開けない*/ return -1;/*正しくなかった(失敗を返す)*/ } txt = fopen("txt04.txt","wb");/*txtファイルはtxt04を書き込みで開く*/ if(txt == NULL){/*もしtxtが開けないなら*/ printf("\aファイルをオープンできません\n");/*txtファイルを開けない時警報が鳴りファイルを開けない*/ return -1;/*正しくなかった(失敗を返す)*/ }
fgets(moji,255,pgm);/*pgmファイルから255文字mojiに配列を入れる*/
if(moji[0]!='P'){/*もし初めのmojiがPでなかったら*/ return NULL;/*正しくなかった(失敗を返す)*/ } sscanf(moji,"P%d",&shikibetu);/*mojiからP%dをshikibetuに入れる*/ if(shikibetu<1||shikibetu>6){/*もしshikibetuが1より小さいまたは6より大きいとき*/ return NULL;/*正しくなかった(失敗を返す)*/ } fprintf(txt,"ファイル形式:P%d\n",shikibetu);/*txtにファイル形式:P%d\nをshikibetuとして入れる*/
do{ fgets(moji,255,pgm);/**/ }while (moji[0]=='#');
sscanf(moji,"%d%d",&x,&y);/*mojiから%d%dをx,yに入れる*/ if(x<1 || y<1){/*xが1より小さいまたはyより小さいとき*/ return NULL;/*正しくなかった(失敗を返す)*/ } fprintf(txt,"x方向:%d y方向:%d",x,y);/*txtにx方向:%d y方向:%dをx,yとして入れる*/
if(shikibetu !=4 ||shikibetu !=1){/*もしshikibetuが4でない、または1でなかったら*/ do{ fgets(moji,255,pgm);/*pgmファイルの255*/ }while (moji[0]=='#');
sscanf(moji,"%d",&kido);/*mojiから%dをkidoに入れる*/ if(kido<1 || kido>256){/*もしkidoが1より小さいまたは256より大きいなら*/ return NULL;/*正しくなかった(失敗を返す)*/ } fprintf(txt,"最大輝度:%d",kido);/*txtに最大輝度:%dをkidoとして入れる*/ } puts("指定した画像ファイルのヘッダファイルをとりこみました。");
fclose(pgm);/*pgmファイルを閉じる*/ fclose(txt);/*txtファイルを閉じる*/
return(0); }
|