私は、ユーザーが削除、追加、編集できるWarehouseプログラムと対話するプログラムを構築するはずだった私の割り当てでほぼ完了しています...しかし、event_loop
の機能では、メニューから選択すると、スイッチのステートメントでデフォルトになります。私は私のask_question_menuでuniontypeのanswer_tを使用しているので、多分それは私が単一のcharになりたいその関数からの戻り値と関係があるでしょう。誰かがここで何が起こっているのか教えてもらえますか?Cで共用体を使用してステートメントを切り替え、問題が発生しました。コードに何が問題なのですか?
非常にお手伝いいただきありがとうございます。
typedef union {
int i;
float f;
char *s;
char d;
} answer_t;
char ask_question_menu(char *question){
answer_t answer = ask_question(question, correct_input, (convert_func) toupper);
return answer.d;
}
//my general function for user input follows here...
answer_t ask_question(char *question, check_func check, convert_func convert)
{
int buffersize = 50;
char buffer[buffersize];
do
{
printf("%s\n", question);
read_string(buffer, buffersize);
}
while(check(buffer)==false);
answer_t result = convert(buffer);
return result;
}
int event_loop(item_t *db, int *db_size)
{
while(true){
char choise = ask_question_menu(" [L]ägga till en vara\n [T]a bort en vara\n [R]edigera en vara\n Ån[g]ra senaste ändringen\n Lista [h]ela varukatalogen\n [A]vsluta\n");
switch(choise)
{
case 'L':
add_item_to_db(db, db_size);
break;
case 'T':
remove_item_from_db(db, db_size);
break;
case 'R':
edit_db(db, *db_size);
break;
case 'G':
printf("Not yet implemented\n");
break;
case 'H':
list_db(db, *db_size);
case 'A':
return 0;
break;
default:
printf("Wrong input\n");
break;
}
}
}
問題を引き起こす最初のことは、コードの書式設定です。 –
'case 'H':' 'break'文がありませんか? –
'(convert_func)toupper'はおそらく未定義の動作につながります。これを確認するには、 'convert_func'の定義を表示してください。 –