• ベストアンサー

ファイルオープンの関数について教えてください。

住所録保守のプログラムの宿題なんですが、ファイルオープンを関数にせずには動かせるのですが、関数にするとエラーが山のようにでます。参考書もよんでるのですがよくわかりません。明日提出なのでよろしくお願いします。                                     関数にする前の考えたプログラムは、                                            struct aaa{ char b                                                       char  c            };                                                         FILE *fp; struct aaa[100]; if((fp=fopen("c:/a.txt","rt"))==NULL) exit(0);です。                                         宿題は f_open(char *name,char *mode) を使って指定されたファイルを指定されたモードで開くという関数を作りなさい。                                                     引数 ポインタ nameはファイル名/mode はオープンモード 戻り値なし という問題です。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

「No.2の方への回答に対する補足」を見て、アドバイスをさせていただきます。 エラー原因と解決策としては、以下を参考にして下さい。 1.関数”file_open”内で定義している”fp”は、その関数内でしかアクセスできないのにmain関数からアクセスしている。 -> ”fp”をグローバル変数にする。 (”FILE *fp;”の行を構造体定義の直後に移動する。) 2.main関数から関数”file_open”を呼び出す際のパラメータの渡し方がおかしい。 -> 文字列定数を渡すときはダブルコーテーション("")で囲む。 (c:/a.txt, rt -> "c:/a.txt", "rt") 以上のように変更すればよいと思います。 最後に、少々専門的で申し訳ありません。

haring-haring
質問者

お礼

ありがとうございます。 少し考えてみたら、なんとか糸口がみえてきました。 もう少し考えたらできそうなので・・・ 自分の力でがんばってみたいと思います。

その他の回答 (2)

noname#6581
noname#6581
回答No.2

まぁまずは、そのエラーが山のように出るプログラムをここに書いてください。 そうしないとアドバイスのしようがありません。

haring-haring
質問者

補足

#include<stdio.h> #include<stdlib.h> #define n_max 100 /* 構造体 */ struct aaa{ int b; char c[20]; int d; }; /* ファイルオープン */ void file_open(char *name,char *mode) { FILE *fp; struct aaa x[n_max]; if((fp=fopen(name,mode))==NULL) ; printf("%s がオープンできません。\n",name); exit(0); }; /* ファイル一覧 */ main() { file_open(c:/a.txt, rt); printf("\n\n * 一覧表示 *\n\n"); printf(" ______________________________\n"); printf(" |番号|  氏 名(漢字) |データ|\n"); while(feof(fp)==0) { fscanf(fp,"%d%s%d",&x.a,&x.b,&x.c); if(feof(fp)!=0) break; と途中までですが、根本的に理解できていないので、おかしなことをしているのはわかるんですが、 よろしくお願いいたします。

  • jppy
  • ベストアンサー率14% (14/99)
回答No.1

質問がいまいち・・・ 1.関数にせずには動かせる   ファイルの読み込みができてる? 2.関数にするとエラーが・・・・   成り行きがわかりません とりあえず質問では構造体のメンバ変数宣言には「;」をつけてください。そういうことでもない気もしますが・・・

haring-haring
質問者

お礼

すみません。とりあえず、関数が苦手?というか、 わからないので登録・修正・削除・一覧表示とサブルーチンの部分について作りました。 たぶん、各ルーチンでファイルオープンは共通だから簡単にするために関数にしなさい! というものなのですが(頭が弱くて先生の課題が理解できなくて(@0@)、 教えていただく立場なのに説明がうまくできなくてすみません・・・) とりあえず、自分の作ったプログラムのファイルオープン部分を関数に変えてみようと、 支持があったとおり、f_open(・・,・・)というのを使って関数を作ったのですが、 理解できてないのでファイルオープンができない状態です。よろしくお願いいたします。

関連するQ&A