C言語の課題でまたまた悩んでいます。
前にも、投稿して一部はうまくいきその後自力で何とかしようと頑張ったのですがやはりできませんでした。そこでもう一度皆さんの力を借りたいと思い投稿しました。
改めまして、
課題は構造体で顧客情報を確保(キーボードで1~50の顧客情報の数を入力)し、分岐点(登録、一覧表示、削除、ファイル出力、終了)に行き、それぞれを行なうプログラムです。
登録では、名前、ふりがな、電話番号を入力(idは1から順につける)。名前、ふりがなの型はcharで確保して入力もそのままなんですが、電話番号の型はcharにして0~9までとハイフンのみ入力可能にし、他の文字を入力したらエラーを返すようにするみたいなんですが方法がわからないです。
一覧表示では、id、名前、ふりがな、電話番号をそれぞれ表示します。今のところ問題はないです。
削除では、指定したidを削除し、削除したidは再利用はできないがその分新たなidで顧客情報を入力することができる。
記述してエラーは出なかったのですが削除はされません。
ファイル出力では、csv形式で出力するみたいなんですが。記述してもエラーが返ってくるばかりでよくわからないです。構造体の出力の場合
、記述の仕方が違うと思うのですが???の部分など全体的に記述の仕方がわかりません。
ちなみに、私が記述したのは下記のとおりです。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "top.h"
#include "ichiran.h"
#define size_id (4)
#define size_name (24)
#define size_huri (24)
#define size_tel (16)
struct kokyaku
{
long id[size_id];
char name[size_name];
char huri[size_huri];
char tel[size_tel];
struct kokyaku *next;
};
int main()
{
int kokyaku , bunki , sakuzyo , i , j;
//顧客情報確保の件数 メニュー画面での分岐 削除id番号 顧客情報の件数と比較
long id = 1; //顧客番号
struct kokyaku *kok;
printf("顧客情報がありません。何件分確保しますか?(1 - 50)");
scanf("%d",&kokyaku);
system("cls");
if(kokyaku < 1 || kokyaku > 50)
{
printf("<<入力範囲にありません>>\n");
printf("<<処理を中断します>>\n");
return 0;
}else{
kok = (struct kokyaku *)malloc( sizeof(struct kokyaku) * (kokyaku));
}
i = 0;
while(bunki = 5){
printf("%s", top1);
printf("処理区分>");
scanf("%d",&bunki);
system("cls");
switch(bunki) //メニュー画面での分岐
{
case 1: //登録
if(id <= kokyaku)
{
printf("***** 顧客登録画面 *****\n");
*(kok[i].id) = id;
printf("氏名 :");
scanf("%s", kok[i].name);
printf("ふりがな:");
scanf("%s", kok[i].huri);
printf("電話番号:");
scanf("%s", kok[i].tel);
id++;
kok[i].next = &kok[i+1];
i++;
}else{
printf("登録がいっぱいになりました");
}
break;
case 2: //一覧表示
printf("%s\n", ichiran1);
printf("%s\n", ichiran2);
j = i;
i = 0;
while(i < j)
{
printf("%d%5s%25s%25s\n", *(kok[i].id) , kok[i].name , kok[i].huri , kok[i].tel);
i++;
}
printf("%s\n", ichiran2);
break;
case 3: //削除
scanf("%d",&sakuzyo);
for(i = 0;i < kokyaku || i < sakuzyo;i++)
{
if(i == sakuzyo - 1)
{
kok[i-1].next = &kok[i+1];
}
}
kokyaku++;
break;
case 4: //ファイル出力
FILE *fp;
if((fp = fopen("kokyaku.csv", "w")) == NULL )
{
return 0;
}
while(fgets(???) != NULL)
{
printf("%s", ???);
}
fclose(fp);
printf("プログラムが終了しました。\n");
return 0;
break;
case 5: //終了
return 0;
break;
default: //エラー
printf("<<処理区分エラー>>");
break;
return 0;
}
}
return 0;
}
ちなみにエラーが出ている場所は削除とファイル出力の部分のみです。
完成にはまだ遠くおかしなところがたくさんあると思います。ご指摘よろしくお願いします。
補足
「お分かりになる人」と言うのは、実際のプログラムについてです。