ページ 11

sscanfでの読み込みの不具合

Posted: 2011年4月23日(土) 18:19
by タマ
windows visual studio 2008を使っています。
sscanfを利用して、空白のある行の文字も読み込むように
したいのですが、なかなかうまくいきません。
下のコードでのrow、col、valueの値が大きくなってしまいます。
どうすれば正しく表示されるでしょうか?

コード:

#include <stdio.h>
#include<stdlib.h>

int main(void){
	int row,col,value,gyouretu;
	char buf[1024];
	FILE *fin;
	if ((fin = fopen("data1-1.txt", "r")) == NULL) {
		printf("file open error!!\n");
		return 1;	
	}
	
	if(fgets(buf,sizeof(buf),fin)!=NULL){
		sscanf(buf,"%d",&gyouretu);
		printf("gyouretu=%d\n",gyouretu);
	}

	while(fgets(buf,sizeof(buf),fin)!=NULL){
		sscanf(buf,"%d %d %d",&row,&col,&value);
		printf("row=%d col=%d value=%d\n",&row,&col,&value);
		/*文字列の処理*/
	}
	fclose(fin);
	return 0;
}
data1-1.txtというのは、

コード:

9
0 1 1
0 2 4
0 3 2
1 2 2
1 4 7
2 3 3
2 4 1
2 5 5
3 6 3
4 5 3
4 7 5
5 6 4
5 7 3
6 8 6
7 8 2
こんな感じのものです。空白の無い1行目はちゃんと読み込めています。

Re: sscanfでの読み込みの不具合

Posted: 2011年4月23日(土) 18:29
by ISLe
アドレスを表示してしまってますよ。

あとscanf系関数は空白文字を読み飛ばす仕様なので、書式指定文字列に空白を含めなくて良いです。
"%d %d %d" → "%d%d%d"

Re: sscanfでの読み込みの不具合

Posted: 2011年4月23日(土) 18:44
by タマ
20行目の%を取り除いたらちゃんと表示できるように
なりました、ありがとうございます。

Re: sscanfでの読み込みの不具合

Posted: 2011年4月24日(日) 00:06
by ISLe
タマ さんが書きました:20行目の%を取り除いたらちゃんと表示できるように
なりました、ありがとうございます。
&ですね。