2017-10-02 37 views
0

Besoin d'aide à nouveau. L'utilisateur entre des valeurs dans la fonction docreate() et j'ai besoin de ces valeurs dans la fonction principale pour les imprimer. J'ai essayé mais incapable d'atteindre l'objectif. J'ai juste une caractéristique du drone (nom) pour l'instant pour imprimer quand l'utilisateur entre 2 dans le code principal. Le code est ci-dessous:Conserver les valeurs de structure dans main() à partir de function()

#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);' - n'est une déclaration valide de rien. –

+0

il était vide do_create (int dronesCreated); précédemment. Je l'ai changé pour déplacer les valeurs mais ça ne marche pas de toute façon. –

+0

Le tableau doit être défini dans 'main'. Si le type de retour de la fonction est 'void', il ne doit pas renvoyer de valeur. – BLUEPIXY

Répondre

0

Votre code a peu d'erreurs, de les fixer comme suit peut vous donner les résultats souhaités que vous recherchez:

  1. struct do_create(int dronesCreated); est une déclaration invalide et il devrait être void do_create(int dronesCreated);
  2. vous utilisez la variable de drone dans le principal comme un tableau, mais il a été déclaré comme drone_t struct, il devrait donc être déclarée comme un tableau comme suit: struct drone_t drone[MAXDRONES];
  3. char namee; est jamais utilisé et devrait être soit supprimé ou doit être utilisé
  4. Les tableaux de C sont 0 indexés, mais l'index dronesCreated a été initialisé à 0 et incrémenté de 1 dans la première instruction if, donc il commencera de 1 au lieu de 0. Donc, vous devez l'initialiser avec -1 et incrémenté de 1 dans l'instruction if il commencera alors à partir de l'index 0, ou vous devrez l'incrémenter après avoir invoqué le do_create
  5. do_create est déclaré comme void mais vous essayez de retourner une valeur (char * dans votre cas), de sorte que vous pouvez changer pour retourner struct drone_t
  6. intérieur do_create vous redéfinissez struct drone_t drone[dronesCreated] qui a été défini dans le principal, notez que drone variable do_create sera le drone défini dans la portée la plus proche, qui est la variable locale et en la modifiant, elle n'affectera pas celle définie dans main. Donc, soit vous devez le définir comme variable globale, pour le passer à do_create comme paramètre, soit pour que do_create retourne le nouveau struct drone_t à main et à main pour l'assigner dans le tableau drone.