2017-10-02 3 views
0

もう一度ヘルプが必要です。ユーザーはdocreate()関数でいくつかの値を入力しています。これらの値をmain関数で元に戻す必要があります。私は試しましたが、目標を達成できませんでした。ユーザーがメインコードに2を入力したときに印刷するための無人機(名前)のただ1つの特性です。コードは以下の通りです:function()からmain()に構造体の値を戻す

#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; 
} 
+0

'struct do_create(int dronesCreated);' - は何も有効な宣言ではありません。 –

+0

これは無効です。do_create(int dronesCreated);以前は私は値を移動するためにそれを変更しましたが、それはとにかく動作しません。 –

+0

配列は 'main'で定義されていなければなりません。関数の戻り値の型が 'void'の場合、値を返さないでください。 – BLUEPIXY

答えて

0

あなたのコードは次のようにそれらを固定いくつかのエラーは、あなたが探している望ましい結果与える可能性があります。

  1. struct do_create(int dronesCreated);は無効宣言であり、それはvoid do_create(int dronesCreated);
  2. する必要があります
  3. あなたは配列としてメインでドローン変数を使用しているが、それは次のように配列として宣言されなければならないので、それは、drone_t構造体として宣言されました:struct drone_t drone[MAXDRONES];
  4. char namee;が使用されることはありませんし、どちらかがあるべき削除または使用する必要があります
  5. Cの配列は0ですが、dronesCreatedインデックスは0に初期化され、最初のifステートメントで1ずつ増加するため、0ではなく1から開始されます。したがって、初期化するか-1を指定し、if文の中で1をインクリメントすると、インデックス0から開始するか、do_createを呼び出した後にインクリメントする必要があります。
  6. do_createはvoidとして宣言されていますが、あなたの場合)ので、あなたは、あなたがメインで定義されたstruct drone_t drone[dronesCreated]を再定義do_createstruct drone_t
  7. を返すように変更される可能性があり、注意でdrone変数ものはローカル変数である最も狭いスコープで定義されたdroneになり、それを変更してもmainに定義されたものには影響しません。したがって、それをグローバル変数として定義して、パラメータとしてdo_createに渡すか、あるいはdo_createdrone配列に割り当てるには、新しいstruct drone_tをメインとメインに戻す必要があります。
関連する問題