コードの意味が分からないです・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
うなぎどんぶり
記事: 3
登録日時: 14年前
住所: 東京

コードの意味が分からないです・・・

#1

投稿記事 by うなぎどんぶり » 14年前

龍神録プログラミングの館を参考にしてシューティングゲームを作ってます。
敵情報をエクセルで作って読み込む(11章)ための関数ですが、大半は理解できたものの、一部分が分からないです。
実際に配列に読み込むwhileループの一番最初のIF文は何のためにあるのでしょうか?

コード:

if(inputc[i]=='/'){//スラッシュがあれば
	while(FileRead_getc(fp)!='\n');//改行までループ
	i=-1;//カウンタを最初に戻して
	continue;
}
以下は関数全体ですが、自分なりに少し変えていたり、変なコメントがついていたりしますが、そこは気にしないでください…

コード:

void load_enemy_deta(){
	int  n=1,num=0,i,fp,exit=0;//nは行、numは列をループで回すための変数。fpはファイル展開用。exitはEOFまで行った時の脱出用。
    char fname[32]={"enemy_list.csv"};
    int  input[64];//次の文字がなんなのかを判断するために使う。
    char inputc[64];//こちらが読み込み本命

    fp = FileRead_open(fname);//ファイル展開
    
	if(fp == NULL){
        printfDx("read error\n");//読み込みエラーを告知する
        return;
    }
    
	
	for(i=0;i<2;i++)while(FileRead_getc(fp)!='\n');//はじめの二行を飛ばす(説明文のため)

    while(1){
        for(i=0;i<64;i++){
            inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
            
			if(inputc[i]=='/'){//スラッシュがあれば
				while(FileRead_getc(fp)!='\n');//改行までループ
				i=-1;//カウンタを最初に戻して
				continue;
			}

			if(input[i]==',' || input[i]=='\n'){//カンマか改行なら
				inputc[i]='\0';//そこまでを文字列とし
				break;
			}

			if(input[i]==EOF){//ファイルの終わりなら
				exit=1;//終了
				break;
			}
		}
		switch(num){
			case 0: enemy_order[n].cnt        =atoi(inputc);break;//atoi("文字列")は"文字列"が数字ならその数値を返す。
			case 1: enemy_order[n].Ctrl_type  =atoi(inputc);break;//もし数字ではない"文字列"が入っていたら0を返す。
			case 2: enemy_order[n].enemy_type =atoi(inputc);break;//しかし"文字列"の先頭が数字であるなら、その数値を返す。
			case 3: enemy_order[n].x          =atof(inputc);break;
			case 4: enemy_order[n].y          =atof(inputc);break;
		}
        num++;
        if(num==5){
			num=0;
			n++;//一行読み込み終えたら次の行へ
		}
		if(exit==1)break;
	}
	FileRead_close(fp);
}

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: コードの意味が分からないです・・・

#2

投稿記事 by beatle » 14年前

うなぎどんぶり さんが書きました:実際に配列に読み込むwhileループの一番最初のIF文は何のためにあるのでしょうか?
その行にスラッシュが含まれていたら、その行は読み込まず無視するためです。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: コードの意味が分からないです・・・

#3

投稿記事 by Dixq (管理人) » 14年前

あのコードはあまり適切ではないので、少し書きかえてみました。
お好きな方をお使いください。

コード:

// 1行飛ばす
int SkipOneLine( int FileHdl ){
    int Ch;
    while( 1 ){
        Ch = FileRead_getc( FileHdl );
        if( Ch == -1 ){
            return -1;
        }
        if( Ch == '\n' ){
            return 0;
        }
    }
    return -1;
}
 
//敵の出現情報をエクセルから読み込んで格納する関数
void load_story(){
 
    int  FileHdl;//ファイルハンドル
    FileHdl = FileRead_open( "../dat/csv/11章/storyH0.csv" );//ファイル読み込み
    if( FileHdl == 0 ){ //読めなかったらエラー
        printfDx("read error\n");
        return;
    }
 
    SkipOneLine( FileHdl ) ;    //最初の二行は飛ばす
    SkipOneLine( FileHdl ) ;
 
    int n=0;
    int InputChar;  //一文字格納する入れ物
    int ScannedNum;     //スキャンできた個数
    while( 1 ){
        InputChar = FileRead_getc( FileHdl );//1文字取得する
        if( InputChar == '/' ){ //スラッシュがあれば
            SkipOneLine( FileHdl ) ;//一行読み飛ばし
            continue;
        } else {                //スラッシュじゃなければ
            FileRead_seek( FileHdl, -1, SEEK_CUR ) ;//さっき読んだ一文字戻す
        }
        //書式指定に応じて一行分読み込み
        ScannedNum = FileRead_scanf( 
            FileHdl,
            "%d,%d,%d,%lf,%lf,%lf,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
            &enemy_order[n].cnt,
            &enemy_order[n].pattern,
            &enemy_order[n].knd,
            &enemy_order[n].x,
            &enemy_order[n].y,
            &enemy_order[n].sp,
            &enemy_order[n].bltime,
            &enemy_order[n].blknd,
            &enemy_order[n].col,
            &enemy_order[n].hp,
            &enemy_order[n].blknd2,
            &enemy_order[n].wait,
            &enemy_order[n].item_n[0],
            &enemy_order[n].item_n[1],
            &enemy_order[n].item_n[2],
            &enemy_order[n].item_n[3],
            &enemy_order[n].item_n[4],
            &enemy_order[n].item_n[5]
        );
        if( ScannedNum != 18 ){ //18個全部読めなかったら処理を抜ける
            break;
        }
        n++;
    }
    FileRead_close( FileHdl );
}

うなぎどんぶり
記事: 3
登録日時: 14年前
住所: 東京

Re: コードの意味が分からないです・・・

#4

投稿記事 by うなぎどんぶり » 14年前

別のも作っていただいて・・・本当にありがとうございます。
コメント行を飛ばすためと考えてよいのですね。

あと、このトピックを解決済みにする方法がわからないのですが、どうすればいいのでしょうか?


閉鎖

“C言語何でも質問掲示板” へ戻る