電子書籍の厳選無料作品が豊富!

住所録保守のプログラムの宿題なんですが、ファイルオープンを関数にせずには動かせるのですが、関数にするとエラーが山のようにでます。参考書もよんでるのですがよくわかりません。明日提出なのでよろしくお願いします。                                    
関数にする前の考えたプログラムは、                                            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 はオープンモード 戻り値なし という問題です。

よろしくお願いいたします。

A 回答 (3件)

「No.2の方への回答に対する補足」を見て、アドバイスをさせていただきます。


エラー原因と解決策としては、以下を参考にして下さい。

1.関数”file_open”内で定義している”fp”は、その関数内でしかアクセスできないのにmain関数からアクセスしている。
-> ”fp”をグローバル変数にする。
(”FILE *fp;”の行を構造体定義の直後に移動する。)

2.main関数から関数”file_open”を呼び出す際のパラメータの渡し方がおかしい。
-> 文字列定数を渡すときはダブルコーテーション("")で囲む。
(c:/a.txt, rt -> "c:/a.txt", "rt")

以上のように変更すればよいと思います。
最後に、少々専門的で申し訳ありません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2003/05/25 19:59

まぁまずは、そのエラーが山のように出るプログラムをここに書いてください。


そうしないとアドバイスのしようがありません。

この回答への補足

#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;

と途中までですが、根本的に理解できていないので、おかしなことをしているのはわかるんですが、
よろしくお願いいたします。

補足日時:2003/05/25 18:45
    • good
    • 0

質問がいまいち・・・


1.関数にせずには動かせる
  ファイルの読み込みができてる?
2.関数にするとエラーが・・・・
  成り行きがわかりません

とりあえず質問では構造体のメンバ変数宣言には「;」をつけてください。そういうことでもない気もしますが・・・
    • good
    • 0
この回答へのお礼

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

とりあえず、自分の作ったプログラムのファイルオープン部分を関数に変えてみようと、
支持があったとおり、f_open(・・,・・)というのを使って関数を作ったのですが、
理解できてないのでファイルオープンができない状態です。よろしくお願いいたします。

お礼日時:2003/05/25 18:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!