前提・実現したいこと
前提
c言語を使い、職員の新規登録をしてログインする仕組みを作っています。
作り始めたばかりなのですが、他の部品からmain関数に戻る仕組みにもつながるので今解決しておきたいと思い質問させていただきました。
実現したいこと
main関数からstaff関数を呼び出し、更にtouroku関数を呼び出して仕組みを作っていますが、関数の処理が終わった後に設定したメニュー画面に戻り、戻るを選択するとmain画面に戻る仕組みを作りたいのですが、うまくいきません。
発生している問題・エラーメッセージ
該当のソースコード
main.c
main
1 2#include <stdio.h> 3#include <string.h> 4#include "main.h" 5#include "staff.h" 6#include "common.h" 7 8 9int main(void){ 10 int loop = TRUE; 11 char work[ 128 ]; 12 13 while(loop){ 14 printf( "\n ログイン画面" ); 15 printf( "\n 処理を選択してください" ); 16 printf( "\n 1:職員新規登録" ); 17 printf( "\n 2:ログイン" ); 18 printf( "\n E:終了" ); 19 printf( "\n ? " ); 20 21 /* 処理区分入力 */ 22 work[ 0 ] = '\0'; 23 scanf( "%s", work ); 24 25 /* 入力桁数チェック -> 1 以外 ? */ 26 if( strlen( work ) != 1 ) { 27 printf( "¥n 入力ミスです" ); 28 continue; 29 } 30 31 switch( work[ 0 ] ) { 32 case '1': /* 職員新規登録 */ 33 staff(); 34 break; 35 case '2': /* ログイン */ 36 //login( ); 37 break; 38 case 'e': /* 終了 */ 39 case 'E': 40 loop = FALSE; 41 break; 42 default: 43 printf( "¥n 入力ミスです" ); 44 break; 45 } 46 47 return 0; 48} 49} 50
main,h
main
1int main(void);
staff.c
#include <stdio.h> #include<string.h> #include"staff.h" #include "common.h" #include"otameshi.h" int staff_new(){ int loop = TRUE; char work[ 128 ]; while(loop){ printf( "\n ■1.職員新規登録メニュー■" ); printf( "\n 処理を選択してください" ); printf( "\n 1:職員新規登録" ); printf( "\n 2:お試しデータ登録" ); printf( "\n E:戻る" ); printf( "\n ? " ); /* 処理区分入力 */ work[ 0 ] = '\0'; scanf( "%s", work ); /* 入力桁数チェック -> 1 以外 ? */ if( strlen( work ) != 1 ) { printf( "¥n 入力ミスです" ); continue; } switch( work[ 0 ] ) { case '1': /* 職員新規登録 */ //otameshi(); break; case '2': /*お試しデータ登録 */ otameshi(); break; case 'e': /* 戻る */ case 'E': loop = FALSE; break; default: printf( "¥n 入力ミスです" ); break; } return OK; } return 0; }
staff.h
int staff(); int otameshi();
otameshi.c
#include <stdio.h> #include<string.h> #include"staff.h" #include "common.h" #include"otameshi.h" int otameshi() { FILE * fp = NULL; int loop = TRUE; char work[ 128 ]; while(loop){ printf("お試しデータをバイナリファイルに書き込みますか?( y / n )\n"); /* 処理区分入力 */ work[ 0 ] = '\0'; scanf( "%s", work ); /* 入力桁数チェック -> 1 以外 ? */ if( strlen( work ) != 1 ) { printf( "¥n 入力ミスです" ); continue; } switch( work[ 0 ] ) { case 'y': /* 職員新規登録 */ case 'Y': // セーブデータをバイナリの書き込みでオープン fp = fopen( "staff.bin", "wb"); if(fp == NULL){ printf("ファイルが開けませんでした\n"); return 1; } STAFF staff[]= { //職員コード 職員パスワード {0001, 1234}, {0002, 2345}, {0003, 1234}, }; // バイナリファイルに書き込み fwrite(staff, sizeof(STAFF), sizeof(staff) / sizeof(staff[0]), fp); printf("ファイルに保存しました。\n"); fclose(fp); loop = FALSE; break; case 'n': /* お試しデータの登録をしない場合 */ case 'N': printf(" お試しデータの登録は行いませんでした。\n"); loop = FALSE; break; case 'e': /* 戻る */ case 'E': break; default: printf("文字入力ミスです。\n"); break; } } return OK; }
otameshi.h
int otameshi();
common.h
#include <stdio.h> /* 計測データ表ファイル名 */ #define TRUE 1 //* 真 #define FALSE 0 //* 偽 #define OK 0 //* 正常 #define CANCEL 1 //* 処理中止 #define NG -1 //* 異常 /*職員テーブル*/ typedef struct staff_tbl{ int code; // 職員コード int pass; // 職員パスワード }STAFF;
試したこと
実行結果(コンソール画面)です。
ログインメニュー 処理を選択してください 1:職員新規登録 2:ログイン E:終了 ? 1 ■1.職員新規登録メニュー■ 処理を選択してください 1:職員新規登録 2:お試しデータ登録 E:戻る ? 2 お試しデータをバイナリファイルに書き込みますか?( y / n ) y ファイルに保存しました。(←ここで終了してしまいます。)
本来の実現したい流れ
ログインメニュー 処理を選択してください 1:職員新規登録 2:ログイン E:終了 ? 1 ■1.職員新規登録メニュー■ 処理を選択してください 1:職員新規登録 2:お試しデータ登録 E:戻る ? 2 お試しデータをバイナリファイルに書き込みますか?( y / n ) y ファイルに保存しました。 ■1.職員新規登録メニュー■ 処理を選択してください 1:職員新規登録 2:お試しデータ登録 E:戻る ? E ログインメニュー 処理を選択してください 1:職員新規登録 2:ログイン E:終了 ? E
補足情報(FW/ツールのバージョンなど)
Eclipse 2019-12
訳あってCプロジェクトでツールチェーンMinGW GCCで開発しています。
macOS Catalina ver10.15.7
そのほかの情報が必要であれば分かる範囲で追記します。
何卒よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/12 07:33