我的代碼應該是一個簡單的菜單來改變角色的盔甲。代碼是:沒有正確處理功能
#include <stdio.h>
#include <string.h>
struct Armor {
char chestplate [50];
char helmet [50];
};
void changeArmor(){
struct Armor character;
char a [50];
printf("Choose a chestplate\n");
scanf("%s",&a);
strcpy(character.chestplate,a);
printf("Choose a helmet\n");
scanf("%s",&a);
strcpy(character.helmet,a);
menu();
}
void checkArmor() {
struct Armor character;
printf("Your equipped chestplate is: %s\n", character.chestplate);
printf("Your equipped helmet is: %s\n", character.helmet);
menu();
}
void menu() {
int a;
printf("What do you want to do?\n");
printf("1.Change Armor.\n");
printf("2.Check current armor.\n");
printf("3.Quit\n");
scanf("%d",&a);
if(a==1) changeArmor; // Oops: should be changeArmor();
if(a==2) checkArmor; // Oops: should be checkArmor();
if(a!=3) menu; // Oops: maybe this should be menu(); — or …
}
void initializeChar(){
struct Armor character;
strcpy(character.chestplate, "Shirt");
strcpy(character.helmet, "Hat");
}
int main() {
struct Armor character;
initializeChar();
menu();
return 0;
}
當我嘗試使用菜單上的任何東西時,程序總是退出,而不是運行調用的函數。在代碼中有什麼我一直在做錯的?
編輯:這是括號。謝謝。
這些:'if(a == 1)changeArmor; if(a == 2)checkArmor;如果(a!= 3)菜單;'不是函數調用。你需要'changeArmor();'把它變成一個函數調用。您的編譯器可能會警告您有關無效的聲明。您可能不希望在'changeArmor()'和'checkArmor()'中對'menu()'進行遞歸調用。簡單地忽略它們 - 但是在'menu()'函數中創建一個循環,或者用'main()'調用'menu()'迭代。 –
請勿修改問題以修復代碼,以免再次出現問題 –
在給出答案後,請不要修改您的問題以使答案失效(或提供答案的評論)。對註釋進行必要的修改或多或少都可以,或者保持代碼不變並描述必要的修改,或者選擇一個有幫助的答案。 –