将结构值从函数()返回到main()

时间:2017-10-02 17:54:10

标签: c arrays function pointers structure

再次需要一些帮助。用户正在docreate()函数中输入一些值,我需要在main函数中返回这些值来打印它们。我已经尝试但无法实现目标。当用户在主代码中输入2时,我只是无人机(名称)的一个特征,用于打印。代码如下:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

struct drone_t{
    char name[30];
    float top_s;
    float acc;
};

struct do_create(int dronesCreated);

#define MAXDRONES 3

int main()
{
    struct drone_t drone; 
    int dronesCreated = 0;
    int i;
    char namee;
    while(1)
    {
        printf("1. Create Drone\n2. Calculate Time\n3. Exit\n");
        scanf("%d", &i);
        if (i == 1)
        {
            if(dronesCreated<=MAXDRONES-1)
            {
                dronesCreated++;
                do_create(dronesCreated);
            }
            else
            {
                printf("error: cannot create more drones\n");
            }
        }
        else if (i == 2)
        {
            printf("%s", drone[dronesCreated].name);
        }
        else if (i == 3)
        {
            exit(EXIT_SUCCESS);
        }
        else
        {
            printf("error: select an option between 1 and 3\n");
        }
    }
}

void do_create(int dronesCreated)
{

    struct drone_t drone[dronesCreated];
    printf("What is the name of the drone?\n");
    scanf("%s", drone[dronesCreated].name);
    printf("What is the top speed of the drone? (kmph)\n");
    scanf("%f", &drone[dronesCreated].top_s);
    printf("What is the acceleration of the drone? (mpsps)\n");
    scanf("%f", &drone[dronesCreated].acc);
    return drone.name;
}

1 个答案:

答案 0 :(得分:0)

您的代码错误很少,修复它们可能会为您提供所需的结果:

  1. struct do_create(int dronesCreated);是无效声明,应为void do_create(int dronesCreated);
  2. 你在main中使用drone变量作为数组但是它被声明为drone_t struct,所以它应该声明为数组如下:struct drone_t drone[MAXDRONES];
  3. char namee;从未使用,应该删除或应该使用
  4. C中的数组是0索引,但dronesCreated索引初始化为0并在第一个if语句中递增1,因此它将从1而不是0开始。因此,您要么初始化它-1,当在if语句中增加1时,它将从索引0开始,或者你必须在调用do_create后增加它
  5. do_create被声明为void,但您尝试返回一些值(在您的情况下为char *),因此您可以将其更改为返回struct drone_t
  6. do_create内你重新定义了在main中定义的struct drone_t drone[dronesCreated],请注意drone中的do_create变量将是clsoest范围中定义的drone,这是局部变量,修改它不会影响main中定义的变量。因此,要么必须将其定义为全局变量,要将其作为参数传递给do_create,要么使do_create将新struct drone_t返回到main,而将主要归入drone以将其分配给{ {1}}数组。