ファイル書き込みを関数化したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
taz
記事: 35
登録日時: 13年前
住所: 兵庫

ファイル書き込みを関数化したい

#1

投稿記事 by taz » 13年前

こんにちは。
以下コードです。

コード:

//読み込みファイル
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *fp; //ファイルポインタ
char *fname = "comma.csv"; //ファイル名

//会員メンバ構造体
struct member {
	int no;
	char name[20];
	char adress[20];
	char tel[20];
	char mail[20];
};

/*メイン関数*/
main()
{
	int no; //数字の入力値
	int ret; //関数の返り値
	
	printf("---会員管理システムメニュー---\n\n");
	printf("1.新規登録\n");
	printf("2.変更\n");
	printf("3.削除\n");
	printf("4.一覧表示\n");
	printf("No? ");
	ret=scanf("%d",&no); //数値を入力
	
	//1の時
	if(no == 1)
	{
		ret = add_record(); //新規追加
	}
	//2の時
	else if(no == 2)
	{
		ret = update_record(); //更新処理
	}
	//3の時
	else if(no == 3)
	{
		ret = del_record(); //削除処理
	}
	//4の時
	else if(no == 4)
	{
		ret = disp_record(); //一覧表示
	
	}
}

/*新規登録*/
int add_record()
{
	struct member member[20]={0}; //メンバ構造体配列の宣言
	int choice; //決定の入力値
	int i=0; //配列の番号

	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&(member[i].no)); //会員番号
	printf("会員名称(漢字,英語)? ");
	scanf("%s",member[i].name); //名前
	printf("住所(漢字,数字50文字)? ");
	scanf("%s",member[i].adress); //住所
	printf("電話番号(半角文字-で区切る)? ");
	scanf("%s",member[i].tel); //電話番号
	printf("メールアドレス(半角英数字)? ");
	scanf("%s",member[i].mail); //メールアドレス
	printf("新規登録しますか?(1:yes 2:no)? ");
	scanf("%d",&choice); //番号の入力

	//新規登録しない時
	if(choice == 2)
	{
		system("cls"); //コマンドプロンプトの画面クリア
		main(); //メイン関数
	}

	fp = fopen(fname,"a"); //上書きモードでファイルを開く
	
	//ファイルポインタがNULLの時
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1; //エラー値として-1を返す
	}

	//ファイルへ出力する
	fprintf(fp,"%d,%s,%s,%s,%s\n",member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail);

	fclose(fp); //ファイルを閉じる

	printf("%sファイル書き込みが終わりました\n",fname);
	return 0;
}

/*更新処理*/
int update_record()
{
	struct member member[20]={0}; //メンバ構造体配列の宣言
	int no; //入力した会員番号
	int choice=0; //入力した番号
	int ret; //返り値
	int i=0; //構造体配列の番号
	int g=0; //構造体配列の番号
		
	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no); //会員番号の入力

	fp = fopen(fname,"r"); //ファイルを読み込みモードでオープン
	
	//ファイルポインタがNULLの時
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1; //エラー返り値として-1を返す
	}
	
	//ファイル読み込み終了まで繰り返す
	while(feof(fp)==0)
	{
			//ファイルからデータを読み込む
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				//入力番号と配列の番号が等しい時
				if(no==member[i].no)
				{
				   printf("%s\n",member[i].name);
                   scanf("%s",member[i].name); //名前
                   printf("%s\n",member[i].adress);
                   scanf("%s",member[i].adress); //住所
                   printf("%s\n",member[i].tel);
                   scanf("%s",member[i].tel); //電話番号
                   printf("%s\n",member[i].mail);
                   scanf("%s",member[i].mail); //メールアドレス
                   printf("%s\n","変更登録しますか?(1:yes 2:no) ");
                   scanf("%d",&choice); //番号入力
				   
				   //変更登録しない場合
				   if(choice==2)
				   {
						system("cls"); //コマンドプロンプトの画面をクリア
						main(); //メイン関数に戻る
				   }
				}
			}
			i++;
	}
	fclose(fp); //ファイルを閉じる
	fp = fopen(fname,"w"); //書き込みモードでオープンしファイルをクリア
	fclose(fp); //ファイルを閉じる
	fp = fopen(fname,"w"); //書き込みモードでファイルをオープン
	
	//配列の中身を全て取り出す
	while(g<i-1)
	{
		fprintf(fp,"%d,%s,%s,%s,%s\n",member[g].no,member[g].name,member[g].adress,member[g].tel,member[g].mail);
		g++;
	}
	fclose(fp); //ファイルを閉じる
	printf("%s","ファイル書き込みが終わりました");
	return 0;
}

/*削除処理*/
int del_record()
{
	struct member member[20]={0}; //メンバ情報構造体配列の宣言
	struct member member1 = {EOF,EOF,EOF,EOF,EOF}; //構造体配列の終端値
	int no; //会員番号の出力値
	int choice=0; //削除決定値
	int i=0; //構造体の番号
	int ret; //関数の返り値
	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no); //会員番号の入力
    ret = csv_read(); //ファイルの読み込み関数
	
	//ファイル読み込み終了まで繰り返す
	while(feof(fp)==0)
	{
			//ファイルからデータを読み込み、構造体配列に格納
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				//キーボードの入力値と構造体配列の番号が一致する時
				if(no==member[i].no)
				{
				   printf("\n%d",member[i].no); //会員番号
				   printf("\n%s",member[i].name); //名前
				   printf("\n%s",member[i].adress); //住所
				   printf("\n%s",member[i].tel); //電話番号
				   printf("\n%s",member[i].mail); //メールアドレス
				   printf("\n%s","削除しますか?(1:yes 2:no)? ");
				   scanf("%d",&choice); //選択値を入力
				   
				   //削除しない時
				   if(choice==2)
				   {
						system("cls"); //コマンドプロンプト画面クリア
						main(); //メイン関数に戻る
				   }
				}
			}
			i++;
	}
	i--;
	member[i]=member1; //構造体配列に終端値を代入
	i = 0;
	fclose(fp);	//ファイルを閉じる
	fp = fopen(fname, "w"); //書き込みモードでオープンしファイルをクリア
	fclose(fp); //ファイルを閉じる
	fp = fopen(fname, "w"); //ファイルを書き込みモードでオープン
	
	//会員番号がEOFでない場合
	while(member[i].no!=EOF)
	{
		//入力した会員番号と配列内の会員番号が等しくない時
		if(no!=member[i].no)
		{
			fprintf(fp,"%d,%s,%s,%s,%s\n",member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail);
		}
		i++;
	}
	fclose(fp);
	printf("%s","削除されました。");
	return 0;
}

/*一覧表示*/
int disp_record()
{
	struct member member[20]={0};//構造体メンバ宣言
	int choice=0;//キーボード入力値格納変数
	int i=0;//構造体配列の番号
	
	//読み込みモードでファイルをオープン
	fp = fopen(fname,"r");
	//ファイルポインタがNULLの場合
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1; //-1をエラー返り値として返す
	}
	
	//ファイル読み込み終了まで繰り返す
	while(feof(fp)==0)
	{
		//ファイルからデータを読み込み、構造体配列に格納
		if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  		{
			   printf("\n%d",member[i].no); //番号
			   printf("\n%s",member[i].name); //名前
			   printf("\n%s",member[i].adress); //住所
			   printf("\n%s",member[i].tel); //電話番号
			   printf("\n%s",member[i].mail); //メールアドレス
		}
	}
	printf("\n\n%s\n","メニューに戻ります。1:yes");
	scanf("%d",&choice); //メニューに戻るための入力
	//入力値が1の場合
	if(choice==1)
	{
		system("cls"); //コマンドプロンプトの表示クリア
		main(); //メイン関数に戻る
	}
	fclose(fp); //ファイルを閉じる
	return 0;
}

int csv_read()
{
	fp = fopen(fname,"r"); //ファイルを読み込みモードで開く
	
	//ファイルポインタがNULLかどうか判定
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1; //エラーの返り値として-1を返す
	}
}

fprintf(fp,"%d,%s,%s,%s,%s\n",member.no,member.name,member.adress,member.tel,member.mail);の部分を関数化したいのですがうまくいきません。どう書けばよいでしょうか?
int csv_write()
{
}

nil
記事: 428
登録日時: 13年前

Re: ファイル書き込みを関数化したい

#2

投稿記事 by nil » 13年前

うまくいきませんとのことですが、どのようにうまくいかないのですか?詳しくお願いします。
また、csv_writeは、fprintfのみを関数化するのですか?
それともfopenからfcloseまでを関数化するのですか?

taz
記事: 35
登録日時: 13年前
住所: 兵庫

Re: ファイル書き込みを関数化したい

#3

投稿記事 by taz » 13年前

涼雅 さんが書きました:うまくいきませんとのことですが、どのようにうまくいかないのですか?詳しくお願いします。
また、csv_writeは、fprintfのみを関数化するのですか?
それともfopenからfcloseまでを関数化するのですか?
fprintf のみを関数化しますが、うまく動いてくれません。値が入ってないようです。空のファイルが出来上がります。

Ryo

Re: ファイル書き込みを関数化したい

#4

投稿記事 by Ryo » 13年前

失敗したままでいいので、現在作ったint csv_write()を提示してみてください

taz
記事: 35
登録日時: 13年前
住所: 兵庫

Re: ファイル書き込みを関数化したい

#5

投稿記事 by taz » 13年前

Ryo さんが書きました:失敗したままでいいので、現在作ったint csv_write()を提示してみてください
int csv_write(int i)
{
fprintf(fp,"%d,%s,%s,%s,%s\n",member.no,member.name,member.adress,member.tel,member.mail);
}

です。struct member member[20]={0};//構造体メンバ宣言 は、グローバル変数としています。

box
記事: 2002
登録日時: 14年前

Re: ファイル書き込みを関数化したい

#6

投稿記事 by box » 13年前

taz さんが書きました: struct member member[20]={0};//構造体メンバ宣言 は、グローバル変数としています。
おや?そうすると、そのグローバル変数と
taz さんが書きました:

コード:

/*新規登録*/
int add_record()
{
    struct member member[20]={0}; //メンバ構造体配列の宣言
 
/*更新処理*/
int update_record()
{
    struct member member[20]={0}; //メンバ構造体配列の宣言
 
/*削除処理*/
int del_record()
{
    struct member member[20]={0}; //メンバ情報構造体配列の宣言
 
/*一覧表示*/
int disp_record()
{
    struct member member[20]={0};//構造体メンバ宣言
これらのローカル変数との関係はどうなるのですか?

# 一から設計し直す方がいいような気がする。個人的には。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

taz
記事: 35
登録日時: 13年前
住所: 兵庫

Re: ファイル書き込みを関数化したい

#7

投稿記事 by taz » 13年前

box さんが書きました:
taz さんが書きました: struct member member[20]={0};//構造体メンバ宣言 は、グローバル変数としています。
おや?そうすると、そのグローバル変数と
taz さんが書きました:

コード:

/*新規登録*/
int add_record()
{
struct member member[20]={0}; //メンバ構造体配列の宣言

/*更新処理*/
int update_record()
{
struct member member[20]={0}; //メンバ構造体配列の宣言

/*削除処理*/
int del_record()
{
struct member member[20]={0}; //メンバ情報構造体配列の宣言

/*一覧表示*/
int disp_record()
{
struct member member[20]={0};//構造体メンバ宣言
これらのローカル変数との関係はどうなるのですか?

# 一から設計し直す方がいいような気がする。個人的には。
それらは、消してグローバル変数で一括管理します。

taz
記事: 35
登録日時: 13年前
住所: 兵庫

Re: ファイル書き込みを関数化したい

#8

投稿記事 by taz » 13年前

関数化するのは無理ですか?

アバター
ookami
記事: 214
登録日時: 14年前
住所: 東京都

Re: ファイル書き込みを関数化したい

#9

投稿記事 by ookami » 13年前

こんにちは、ookamiです。
要するに、
fprintf(fp,"%d,%s,%s,%s,%s\n",member.no,member.name,member.adress,member.tel,member.mail);
という行がそっくりそのまま何度も出てくるので関数にまとめたい、ということですよね?

関数化することは可能です。
『そっくりそのまま』出てくるからには、そのままの関数を作ればいいです。

> それらは、消してグローバル変数で一括管理します。

とのことですが、その状態のソースコードを貼ってください。
今のままですと、グローバル変数もローカル変数もごっちゃなので、空のファイルができているものと思います。

taz
記事: 35
登録日時: 13年前
住所: 兵庫

Re: ファイル書き込みを関数化したい

#10

投稿記事 by taz » 13年前

ookami さんが書きました:こんにちは、ookamiです。
要するに、
fprintf(fp,"%d,%s,%s,%s,%s\n",member.no,member.name,member.adress,member.tel,member.mail);
という行がそっくりそのまま何度も出てくるので関数にまとめたい、ということですよね?

関数化することは可能です。
『そっくりそのまま』出てくるからには、そのままの関数を作ればいいです。

> それらは、消してグローバル変数で一括管理します。

とのことですが、その状態のソースコードを貼ってください。
今のままですと、グローバル変数もローカル変数もごっちゃなので、空のファイルができているものと思います。


ありがとうございます。おかげで関数化することが出来ました。アドバイスをくださったみなさんありがとうございました。

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: ファイル書き込みを関数化したい

#11

投稿記事 by beatle » 13年前

このフォーラムのルールとして、解決した場合は最終的なソースコードや解決した方法を明記していただく必要があります。
同じ事で困っている人の為ですのでお願いします。

taz
記事: 35
登録日時: 13年前
住所: 兵庫

Re: ファイル書き込みを関数化したい

#12

投稿記事 by taz » 13年前

beatle さんが書きました:このフォーラムのルールとして、解決した場合は最終的なソースコードや解決した方法を明記していただく必要があります。
同じ事で困っている人の為ですのでお願いします。
以下コードです。

コード:

//読み込みファイル
#include <stdio.h>
#include <stdlib.h>

FILE *fp; //ファイルポインタ
char *fname = "comma.csv"; //ファイル名
int ret = 0; //関数の返り値
int choice=0; //キーボード入力値格納変数
int i=0; //構造体配列の番号

//会員メンバ構造体
struct member 
{
	int no;
	char name[20];
	char adress[20];
	char tel[20];
	char mail[20];
};

struct member member[20]={0};//構造体メンバ宣言
struct member member1 = {EOF,EOF,EOF,EOF,EOF}; //構造体配列の終端値

/*メイン関数*/
main()
{
	int no; //数字の入力値
		
	printf("---会員管理システムメニュー---\n\n");
	printf("1.新規登録\n");
	printf("2.変更\n");
	printf("3.削除\n");
	printf("4.一覧表示\n");
	printf("No? ");
	ret=scanf("%d",&no); //数値を入力
	
	//1の時
	if(no == 1)
	{
		ret = add_record(); //新規追加
	}
	//2の時
	else if(no == 2)
	{
		ret = update_record(); //更新処理
	}
	//3の時
	else if(no == 3)
	{
		ret = del_record(); //削除処理
	}
	//4の時
	else if(no == 4)
	{
		ret = disp_record(); //一覧表示
	
	}
}

/*新規登録*/
int add_record()
{
	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&(member[i].no)); //会員番号
	printf("会員名称(漢字,英語)? ");
	scanf("%s",member[i].name); //名前
	printf("住所(漢字,数字50文字)? ");
	scanf("%s",member[i].adress); //住所
	printf("電話番号(半角文字-で区切る)? ");
	scanf("%s",member[i].tel); //電話番号
	printf("メールアドレス(半角英数字)? ");
	scanf("%s",member[i].mail); //メールアドレス
	printf("新規登録しますか?(1:yes 2:no)? ");
	scanf("%d",&choice); //番号の入力

	//新規登録しない時
	if(choice == 2)
	{
		system("cls"); //コマンドプロンプトの画面クリア
		main(); //メイン関数
	}

	fp = fopen(fname,"a"); //上書きモードでファイルを開く
	
	//ファイルポインタがNULLの時
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1; //エラー値として-1を返す
	}

	//ファイルへ出力する
	ret=csv_write(i);

	fclose(fp); //ファイルを閉じる

	printf("%sファイル書き込みが終わりました\n",fname);
	return 0;
}

/*更新処理*/
int update_record()
{
	int no; //入力した会員番号
	int g=0; //構造体配列の番号
		
	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no); //会員番号の入力

	fp = fopen(fname,"r"); //ファイルを読み込みモードでオープン
	
	//ファイルポインタがNULLの時
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1; //エラー返り値として-1を返す
	}
	
	//ファイル読み込み終了まで繰り返す
	while(feof(fp)==0)
	{
			//ファイルからデータを読み込む
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				//入力番号と配列の番号が等しい時
				if(no==member[i].no)
				{
				   printf("%s\n",member[i].name);
                   scanf("%s",member[i].name); //名前
                   printf("%s\n",member[i].adress);
                   scanf("%s",member[i].adress); //住所
                   printf("%s\n",member[i].tel);
                   scanf("%s",member[i].tel); //電話番号
                   printf("%s\n",member[i].mail);
                   scanf("%s",member[i].mail); //メールアドレス
                   printf("%s\n","変更登録しますか?(1:yes 2:no) ");
                   scanf("%d",&choice); //番号入力
				   
				   //変更登録しない場合
				   if(choice==2)
				   {
						system("cls"); //コマンドプロンプトの画面をクリア
						main(); //メイン関数に戻る
				   }
				}
			}
			i++;
	}
	fclose(fp); //ファイルを閉じる
	fp = fopen(fname,"w"); //書き込みモードでオープンしファイルをクリア
	fclose(fp); //ファイルを閉じる
	fp = fopen(fname,"w"); //書き込みモードでファイルをオープン
	
	//配列の中身を全て取り出す
	while(g<i-1)
	{
		ret=csv_write(g);
		g++;
	}
	fclose(fp); //ファイルを閉じる
	printf("%s","ファイル書き込みが終わりました");
	return 0;
}

/*削除処理*/
int del_record()
{
	int no; //会員番号の出力値
	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no); //会員番号の入力
    ret = csv_read(); //ファイルの読み込み関数
	
	//ファイル読み込み終了まで繰り返す
	while(feof(fp)==0)
	{
			//ファイルからデータを読み込み、構造体配列に格納
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				//キーボードの入力値と構造体配列の番号が一致する時
				if(no==member[i].no)
				{
				   printf("\n%d",member[i].no); //会員番号
				   printf("\n%s",member[i].name); //名前
				   printf("\n%s",member[i].adress); //住所
				   printf("\n%s",member[i].tel); //電話番号
				   printf("\n%s",member[i].mail); //メールアドレス
				   printf("\n%s","削除しますか?(1:yes 2:no)? ");
				   scanf("%d",&choice); //選択値を入力
				   
				   //削除しない時
				   if(choice==2)
				   {
						system("cls"); //コマンドプロンプト画面クリア
						main(); //メイン関数に戻る
				   }
				}
			}
			i++;
	}
	i--;
	member[i]=member1; //構造体配列に終端値を代入
	i = 0;
	fclose(fp);	//ファイルを閉じる
	fp = fopen(fname, "w"); //書き込みモードでオープンしファイルをクリア
	fclose(fp); //ファイルを閉じる
	fp = fopen(fname, "w"); //ファイルを書き込みモードでオープン
	
	//会員番号がEOFでない場合
	while(member[i].no!=EOF)
	{
		//入力した会員番号と配列内の会員番号が等しくない時
		if(no!=member[i].no)
		{
			ret=csv_write(i);
		}
		i++;
	}
	fclose(fp);
	printf("%s","削除されました。");
	return 0;
}

/*一覧表示*/
int disp_record()
{
	//読み込みモードでファイルをオープン
	fp = fopen(fname,"r");
	//ファイルポインタがNULLの場合
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1; //-1をエラー返り値として返す
	}
	
	//ファイル読み込み終了まで繰り返す
	while(feof(fp)==0)
	{
		//ファイルからデータを読み込み、構造体配列に格納
		if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  		{
			   printf("\n%d",member[i].no); //番号
			   printf("\n%s",member[i].name); //名前
			   printf("\n%s",member[i].adress); //住所
			   printf("\n%s",member[i].tel); //電話番号
			   printf("\n%s",member[i].mail); //メールアドレス
		}
	}
	printf("\n\n%s\n","メニューに戻ります。1:yes");
	scanf("%d",&choice); //メニューに戻るための入力
	//入力値が1の場合
	if(choice==1)
	{
		system("cls"); //コマンドプロンプトの表示クリア
		main(); //メイン関数に戻る
	}
	fclose(fp); //ファイルを閉じる
	return 0;
}

int csv_read()
{
	fp = fopen(fname,"r"); //ファイルを読み込みモードで開く
	
	//ファイルポインタがNULLかどうか判定
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1; //エラーの返り値として-1を返す
	}
}
int csv_write(int i)
{
	fprintf(fp,"%d,%s,%s,%s,%s\n",member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail);
}

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: ファイル書き込みを関数化したい

#13

投稿記事 by beatle » 13年前

後から読んだ人が間違えないように幾つか指摘します。tazさんにとっては解決している問題ですので、読まなくても構いません。もちろん、これを読んで質問があるようなら是非質問してください。

csv_write関数は戻り値型がvoidではないのに戻り値を返しません。よって
ret=csv_write(i);
のようなコードはretに何が入るか分かりません。危険です。
今回のプログラムではret変数に代入したきり使用しておりませんので、運良く危険を回避しています。

csv_read関数も同様に戻り値を戻さない場合があります。

グローバル変数を使い過ぎています。fp, fnameはまだいいとして、ret, choice, iはローカル変数にした方がいいでしょう。

main関数を再帰的に呼び出す構造も、(違反ではないとは思うけれど)普通は見ない構造です。
再帰呼び出しが適した問題にはもちろん再帰呼び出しを使うのは正しいのですが、それでもmainの再帰は普通しません。
なぜなら、多くの再帰呼び出し型のプログラムでは関数の引数を活用するのですが、main関数は引数の型を自由に決められませんので大体の用途には使えません。
そもそも今回の問題はwhileなどのループ構造で解くほうが一般的なやり方だと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: ファイル書き込みを関数化したい

#14

投稿記事 by softya(ソフト屋) » 13年前

beatleさんの内容に補足して書くとcsv_read()関数が関数名と実態がかけ離れています。
その他の部分も、やたらいろんな場所にfopenがあるメンテ性の低い構造をしていて、fopenのエラー処理なども不的確な所が多数あります。
総括すると行き当たりばったりで作ったプログラムの印象です。
業界の方みたいなので厳しく書きますがプロとしては落第点だと思います。
[補足] 他の言語経験があると書かれていますが本当のところはどうなのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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