txtファイルのread

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
LUNA

txtファイルのread

#1

投稿記事 by LUNA » 16年前

宿題で、あるテキストファイルを読み出してコンソール画面に出力させるプログラムなのですが、実行結果がおかしくて困っています。もともと貰ったプログラムをトレースして実行させるものなのでこれで動くはずなのですが・・・実行結果が000000000・・・ばっかりです。
以下プログラム
//プログラム
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
//定数
#define MAP_X 5
#define MAP_Y 5

//メイン関数
void main(void)
{
	FILE *fp;
	char *filename = "map.txt";					//アドレスにmap.txtを入れる?
	char date[3+1];								//なぜ4じゃなく3+1と記述しているのか不明
	int x,y,c;									//x,yは出力用の変数。cはファイルから読み出した数値を入れている?
	int keta_cnt=0;
	int date_cnt=0;
	int buff[MAP_X*MAP_Y+1]={0};
	int Mapdate[MAP_Y][MAP_X]={0};

	if((fp=fopen(filename,"r"))==NULL){			//map.txtファイルがなかったら警告を出して終了  "r"は読み込み(read)
		printf("%s-Not Found\n",filename);
		return ;
	}

	while((c=getc(fp))!=EOF){				//ファイルから一文字入力(getc)。fgetcでも可。fpがEOFではない間以下の処理を行う?
		if(isdigit(c)){						//isdigit数字(0~9)なら真。
			date[keta_cnt]=(char)c;			//data[keta_cnt]の中にcの数値を文字型で入れる。
			keta_cnt++;
		}
		else{								//そうでなければ
			date[keta_cnt]='\0';
			buff[date_cnt]=atoi(date);		//文字列をint型に変換
			keta_cnt=0;
			keta_cnt++;
			if(date_cnt >= MAP_X*MAP_Y) break;
		}
	}
	fclose(fp);  //fopenでオープンされたファイルをクローズする。正常なら0、エラーならEOFを返す

	memcpy(Mapdate,buff,sizeof(Mapdate));

	for(y=0;y<MAP_Y;y++){			//出力部分
		for(x=0;x<MAP_X;x++){
			printf("%d",Mapdate[y][x]);
		}
		printf("\n");
	}
	return ;
}
理解するために注釈文だらけです。
どこかおかしいところでもあるのでしょうか・・・?

よーむ

Re:txtファイルのread

#2

投稿記事 by よーむ » 16年前

date[keta_cnt]='\0';
buff[date_cnt]=atoi(date); //文字列をint型に変換
keta_cnt=0;
keta_cnt++;
if(date_cnt >= MAP_X*MAP_Y) break;

ぱっと見た感じketa_cntを0にした後、keta_cntを足すのではなく別のものを足すのではないでしょうか?

ねこ

Re:txtファイルのread

#3

投稿記事 by ねこ » 16年前

多分「keta_cnt++;」が「date_cnt++;」の間違い

Mist

Re:txtファイルのread

#4

投稿記事 by Mist » 16年前

else{								//そうでなければ

			date[keta_cnt]='\0';

			buff[date_cnt]=atoi(date);		//文字列をint型に変換

			keta_cnt=0;

			date_cnt++;

			if(date_cnt >= MAP_X*MAP_Y) break;

		}
あと、MAP_Yが5に定義されているから最後の行が表示されないけどそれは仕様??
(テキストには6行あるよね)

Mist

Re:txtファイルのread

#5

投稿記事 by Mist » 16年前

あと、単語が変。
データはdata。
dateは日付。

non

Re:txtファイルのread

#6

投稿記事 by non » 16年前

>>char *filename = "map.txt"; //アドレスにmap.txtを入れる?
map.txtという文字列が格納されている場所の先頭アドレスをfilenameに入れている。
(filenameでmap.txtが格納されているアドレスを指すと考えた方がわかりやすい)

>>char date[3+1];//なぜ4じゃなく3+1と記述しているのか不明
入力文字が3桁まで、文字列終端の'\0'が1つで、計4文字
というのを明確にしている。

LUNA

Re:txtファイルのread

#7

投稿記事 by LUNA » 16年前

ご指摘ありがとうございます。指摘された部分を直したら普通に動きました^^;
後単語が変という点につきましてはこのプログラム自体まだ理解してなかったので気が付きませんでしたorz
あとはこのプログラムを応用してマップチップ用のデータをtxtから読み出せれば完了なのでがんばってみようかと思います。
そのため、一応まだ解決マークをつけないでおきます。

LUNA

Re:txtファイルのread

#8

投稿記事 by LUNA » 16年前

一応解決できましたのでマークにチェック入れときます。

閉鎖

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