- ベストアンサー
ネットワーク型データベースの構築
C言語でネットワーク型のデータベースの構築を行っています。 そこで、住所録のデータベースなどで、『氏名 住所 電話番号』をfscanfで読み込みこんでみたのですが巧くいきません。 以下のような感じで作ってみたのですが・・・ fp=fopen("jyusyo.database","r"); fscanf(fp,%d",&num_data); for(i=0;i<num_data;i++){ j=0; while(1){ fscanf(fp,"%c",&tmp[i][j]); if(strcmp(&tmp[i][j],"\n"==0){ break; }else{ j++; } printf("%s\n",tmp[i]); } 他のやり方でもいい方法があれば教えてください!! よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、例題を参考にして憶測で判断してみましたが、 やりたい事は、下記の様な感じですか? それと、この場合は、fscanfを使用するよりも fgets又は、fgetcの方が良い気もしますが・・・ また、strcmpに付いてですが、これは、文字列終端符 までの比較ですので、まず入力バッファの初期化は必要ですし、1文字の場合は適切でない気もしますが・・ どうしても、str~関数を使用するのであれば、 strncmpを使用した方が良い気がしますけど・・・ #include <stdio.h> #include <string.h> void main(void) { FILE *fp ; int num_data ; char tmp[100][256], c ; int i, j ; fp=fopen("jyusyo.database","r"); fscanf(fp,"%d",&num_data); fscanf(fp,"%c",&c); for(i=0;i<num_data;i++){ j=0; memset( tmp[i], '\0', 256 ) ; while(1){ fscanf(fp,"%c",&tmp[i][j]); //if(strcmp(&tmp[i][j],"\n"==0){ if( tmp[i][j] == '\n' ){ break; }else{ j++; } } printf("%s\n",tmp[i]); } }
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
一行に1つの文字列があるなら %sで読み込む方がいいのでは? 最初にデータの数が入っているとしたら、 一行1レコードだと思う(3行1レコード?)ので それだと、それぞれを、分離する必要があると思います。 読み込む時には、分離する必要がないなら fgetsを使う方がいいと思います。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
肝心な情報が抜けてるんですが・・・ 1.jyusyo.databaseのレイアウトというかフォーマット 2.変数の型宣言