期限は月曜日に提出です。
詳細の仕様はwordファイルを参照してください。
今わかる範囲でプログラムを書きました。
詰まっているのはアドレス帳要件(wordファイル)の1と2と4です。
メニューに戻る処理にはcontinueを使うと思って使ってます。 ←自分なりに調べた結果
今知りたいのは、エラーが起きた時のメニューに戻る処理とアドレス表示した後にもメニューを表示させたいです。
OS:windows
コンパイラ:visual stdio 2019
ライブラリ:string
c言語の理解度は「初級c言語やさしいC」という本を1冊一通りやりました。
宜しくお願い致します。
#include<stdio.h>
#include<string.h>
int MENU(int kensu); //メニューの表示
int Bytecheck(int bytesu); //バイトチェックを行う
struct ADDRESS_DATA //構造体型の定義
{
char name[50];
char jusho[50];
char denwa[50];
};
int main(void)
{
struct ADDRESS_DATA address[100]; //構造体変数の宣言
int i=1,kensu=0,j=0,bytesu,Nerror=0;
char name[50],jusho[50],denwa[50],x,m;
do{
m = MENU(kensu);
//登録
if(m == '1'){
printf("名前の入力>>");
scanf("%s",&name[j]);
bytesu = strlen(&name[j]); //バイト数をstrlen関数で数える
Bytecheck(bytesu); //バイト数のチェックをする
if(Nerror == -1){ //入力エラーがあったらcontinueで抜けてメニューを表示する
continue;
}
rewind(stdin);
printf("住所の入力>>");
scanf("%s",&jusho[j]);
bytesu = strlen(&jusho[j]);
Bytecheck(bytesu);
if(Nerror == -1){
continue;
}
rewind(stdin);
printf("電話番号の入力>>");
scanf("%s",&denwa[j]);
bytesu = strlen(&denwa[j]);
Bytecheck(bytesu);
if(Nerror == -1){
continue;
}
rewind(stdin);
j++;
printf("これで登録しますか?\n");
printf(" Y or N \n");
scanf("%c",&x);
if(x == 'Y' || x == 'y'){
strcpy(address[i].name,name); //strcpyで文字列をアドレス帳にコピーしていく
strcpy(address[i].jusho,jusho);
strcpy(address[i].denwa,denwa);
i++;
kensu++;
}
}
//表示
if(m == '2'){
printf("現在の登録件数は「%d」です。\n\n",kensu);
for(i=1;i<=kensu;i++){
printf("No.%d\n",i);
printf("名前 :%s\n",address[i].name);
printf("住所 :%s\n",address[i].jusho);
printf("電話番号:%s\n",address[i].denwa);
}
}
//終了
if(m == 'Q' || 'q'){
break;
}
}while(kensu < 10);
return 0;
}
//メニューを表示するプログラム
int MENU(int kensu)
{
char m;
printf("アドレス帳システム ");
printf("登録件数:%03d件\n\n",kensu);
printf("1.登録\n");
printf("2.表示\n");
printf("Q.終了\n");
printf(">");
scanf("%c",&m);
return m;
}
//バイト数をチェックするプログラム
int Bytecheck(int bytesu)
{
int Nerror=0;
if(bytesu > 50){ //バイト数が50以上なら入力エラーを返す
printf("入力エラー\n");
Nerror = -1;
}
return Nerror; //Nerrorを返す
}