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

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

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

#1

投稿記事 by » 18年前

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で構造体へ格納したいのですが…

#2

投稿記事 by バグ » 18年前

細かいところまでは見ていませんので、まだあるかもしれませんが、とりあえず…

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


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

box

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

#3

投稿記事 by box » 18年前

>	File(s1, count-1);

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

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

#4

投稿記事 by » 18年前

ご回答ありがとうございます。

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


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

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

閉鎖

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