ページ 11

sscanfで構造体へ格納したいのですが…

Posted: 2007年8月20日(月) 12:39
by
main.cppでoriginal.txtを読み込んで構造体に移そうとしたのですが、
コンパイルは成功するのですが、実行をするとエラーが発生してしまいます。
コメント化してある方ではうまくいくので、ファイルの受け渡しに問題があるかと思うのですが、
分かりませんでした。
ご助力お願いします。

--original.txt--
たお 22,1
たおう 12,2
っかい 45,3
--	--

--main.cpp--
#include <stdio.h>
#include <stdlib.h>

#define N1 64
#define N2 256

typedef struct person {
	char name[10];
	int age;
} Person;

void File(char s1[/url][N2], int count);


int main()
{
	FILE  *fin, *fout;
	char r_f_name[N2] = "original.txt";
	char w_f_name[N2] = "txt.txt";
	char s1[N1][N2], s2[N1][N2], s3[N1][N2];
	int count=0, i, j, s;
	
	if( (fin = fopen(r_f_name, "r")) ==NULL ){
		printf("ファイルが見つかりません。");
		exit(1);
	}
	
	if( (fout = fopen(w_f_name, "w")) ==NULL ){
		printf("ファイルへの書き出しが失敗しました。");
		exit(1);
	}
	
	while ( fgets(s1[count++], N2, fin ) !=NULL);
	File(s1, count-1);
	
	
	fclose(fin);
	fclose(fout);
	
	return 0;
}

void File(char s1[/url][N2], int count)
{
	int i;
	char name[20];
	int age, ag;
	Person p[3];
	
	
	for(i=0; i < count; i++){
		sscanf(s1,"%s %d,%d", p.name, p.age, &ag);
		printf("%s : %d %d\n",p.name, p.age, ag);
	}
}
/*
//成功
void File(char s1[/url][N2], int count)
{
	int i;
	char name[20];
	int age, ag;
	
	for(i=0; i < count; i++){
		sscanf(s1,"%s %d,%d", name, &age, &ag);
		printf("%s : %d %d\n",name, age, ag);
	}
}
*/
-----------------------------------------------------------------------

Re:sscanfで構造体へ格納したいのですが…

Posted: 2007年8月20日(月) 13:20
by バグ
細かいところまでは見ていませんので、まだあるかもしれませんが、とりあえず…

ここの部分は…
sscanf(s1,"%s %d,%d", p.name, p.age, &ag);


こうかな?と思います。
sscanf(s1,"%s %d,%d", p.name, &p.age, &ag);

Re:sscanfで構造体へ格納したいのですが…

Posted: 2007年8月20日(月) 14:17
by box
>	File(s1, count-1);

第2引数を-1するのは不要かもしれません。

Re:sscanfで構造体へ格納したいのですが…

Posted: 2007年8月20日(月) 18:41
by
ご回答ありがとうございます。

>バグ様
そこをなおしたところうまくいきました。


>box様
countを-1し無いとエラーになってしまいます。
多分、
while ( fgets(s1[count++], N2, fin ) !=NULL);
では、予定より一つ多く読み込まれるからだと思います。

お二方ともありがとうございました!