【问题标题】:Assistance with pointers in functions to a dynamically allocated array of structs?协助函数中指向动态分配的结构数组的指针?
【发布时间】: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' 字符。 hydrogenoxygen 甚至不是可以保存字符串的字符数组...如果您只想在其中存储数字,只需使用格式字符串 "%d" 以及第二个参数 @987654330 @ 和 &amp;element-&gt;oxygen.
  • 如果您希望反复发布switch 声明,直到missionChoice == 5,然后将switchwhile 括起来,如while ( ... ) { switch { ... } },如果您想要@ 987654337@ 至少获得一次评估,请将您的switch 附上do,例如do { switch { ... } } while ( ... );

标签: c arrays struct malloc dynamic-memory-allocation


【解决方案1】:

在您的main 中,您尝试使用指向您的数组ELEMENT 的指针调用earth 函数。如果你检查earth(...) 的定义,你会发现它接受一个指向一个ELEMENT 的指针,这不是你传递给它的。

【讨论】:

  • 我就是这个意思
  • 那么你应该更新你的答案以使用正确的术语:-) 这种编辑目前不是我能够成功进行的。
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 2021-12-14
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2013-05-26
  • 2012-07-16
相关资源
最近更新 更多