【发布时间】:2014-04-04 20:09:30
【问题描述】:
我正在制作一个关于从系外行星收集元素的游戏。 如果我可以在一个函数中完成所有这些操作,但我将结构数组的指针传递给多个函数,我将没有问题。所以我不断收到错误,因为我不知道每个函数的参数和参数要放置多少个指针。 尤其是函数中的函数(称为missionMenu())是一个真正令人头疼的问题。我也可能弄乱了函数 earth() 中的指针.. 任何帮助将不胜感激!
编辑:我需要帮助修复 MissionMenu() 函数中的 scanf,我认为我上面提到的滥用指针与它有关
#include <stdio.h>
#include <stdlib.h>
#define pause system("pause")
#define cls system("cls")
#define flush fflush(stdin)
#define SIZE 1000
main(){
int count=0;
ELEMENT* element[SIZE];
earth(&count,element);
}//End main
void earth(int *c,ELEMENT **element){
int userMenuChoice = 0;
int i;
int number;
displayMenu();
element[*c] = malloc(sizeof(ELEMENT));
scanf("%i", &userMenuChoice);
switch (userMenuChoice) {
case 1:
missionMenu(element[*c],*c);
break;
case 2:
for(i=0;i<*c;i++)
printf("\t%i\t%i\n", element[i]->hydrogen);
break;
case 3:
break;
}while(userMenuChoice != 4);
}//end end
void missionMenu(ELEMENT *element, int c ){
int missionChoice;
cls;
printf("Which planet would you like to escapade/exploit? \n\n");
printf("1. Gliese 436 b \n");
printf("2. Oxygen Planet\n");
printf("3. 55 Cancri E\n");
printf("4. Nitrogen \n");
printf("Please input your choice (1-3): \n\n");
missionChoice = 0;
scanf("%i", &missionChoice);
switch (missionChoice) {
case 1:
cls;
printf("\n\n\nWelcome to Planet Gliece 436 b, a planet made of burning ice.\n");
printf("The extreme gravity of this planet forces the water to stay in solid form,\neven though the temperature is over 570° fahrenheit.\n\n");
pause;
printf("\n\n\tHow much Hydrogen would you like to collect?");
//scanf("%i",&collect);
scanf("%[^\n]s", element->hydrogen); flush;
printf("\n\ntHow much Oxygen would you like to collect?");
// scanf("%i",&collect);
scanf("%[^\n]s", element->oxygen); flush;
c=c+1;
break;
case 2:
break;
case 3:
break;
case 4:
break;
}while(missionChoice != 5);
}//end mission menu
ELEMENT** newElement() {
ELEMENT** element;
element = malloc(sizeof(ELEMENT));
return element;
} //end newTeam
【问题讨论】:
-
你有什么问题?
-
如何修复指针,以便 scanf 在任务菜单中工作
-
您可以尝试将问题减少到表达您的问题的最小子集吗?您发布了很多可能不相关的代码。请在问题本身中更清楚地说明这一点,否则人们会投票决定将其关闭。
-
这严重需要细分,但至于您发现的部分,格式字符串
"%[^\n]s"会尝试将一个以'\n'结尾的字符串分配给hydrogen和@987654325 @,然后尝试获取并丢弃's'字符。hydrogen和oxygen甚至不是可以保存字符串的字符数组...如果您只想在其中存储数字,只需使用格式字符串"%d"以及第二个参数 @987654330 @ 和&element->oxygen. -
如果您希望反复发布
switch声明,直到missionChoice == 5,然后将switch与while括起来,如while ( ... ) { switch { ... } },如果您想要@ 987654337@ 至少获得一次评估,请将您的switch附上do,例如do { switch { ... } } while ( ... );
标签: c arrays struct malloc dynamic-memory-allocation