在C中,将结构传递给单独函数时出现问题

在C中,将结构传递给单独函数时出现问题,c,function,struct,C,Function,Struct,我无法将结构传递给新函数。我的当前代码打开一个文本文件,将相关信息保存到结构中,并打印保存的信息。现在我尝试编写一个函数,要求用户输入一个名称,让代码检查结构中的所有名称字段,并在找到结果后返回信息。在我尝试将结构传递给“SearchName”函数之前,代码工作正常。main显示我已经正确地保存了相关信息,我对“searchDroneName”函数也做了同样的操作。但是,当我在“searchDroneName”函数中打印出结构的保存信息时,它会打印出一堆随机数和奇怪的字符 我相信这只是因为我对功

我无法将结构传递给新函数。我的当前代码打开一个文本文件,将相关信息保存到结构中,并打印保存的信息。现在我尝试编写一个函数,要求用户输入一个名称,让代码检查结构中的所有名称字段,并在找到结果后返回信息。在我尝试将结构传递给“SearchName”函数之前,代码工作正常。main显示我已经正确地保存了相关信息,我对“searchDroneName”函数也做了同样的操作。但是,当我在“searchDroneName”函数中打印出结构的保存信息时,它会打印出一堆随机数和奇怪的字符

我相信这只是因为我对功能和如何传递信息缺乏了解,但非常感谢您的帮助,谢谢

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DRONE_COUNT 10

typedef struct{

    int drone_number;
    char drone_name[20];
    int year_manufactured;
    double mass;
    double top_speed;
    double max_distance;
    double load_capacity;

} drone_info;


int searchDroneName(int no_of_drones){
    drone_info droneinfo[10];

    int i, found, numdrones;
    char namechoice[20];
    numdrones = no_of_drones;

    // Test Data    
        printf("Data:\n\n");
    for (i=0; i < numdrones; i++){
        printf("ID: %d Name: %s  Year: %d  Mass: %.2f  Top Speed: %.2f  Max Distance: %.2f Load Capacity: %.2f\n", 
        droneinfo[i].drone_number, droneinfo[i].drone_name, droneinfo[i].year_manufactured, droneinfo[i].mass, droneinfo[i].top_speed, droneinfo[i].max_distance, droneinfo[i].load_capacity);

    }


    printf("Input Drone Name: ");
    scanf("%19s", namechoice);
    found = 0;
    for (i=0; i < numdrones; ++i){
        printf("Drone Name: %s\n", droneinfo[i].drone_name);

        if (!strcmp(namechoice, droneinfo[i].drone_name)){

        printf("FOUND A MATCH");
        found = 1;
        }

    }

    if(found == 0){
        printf("No Matches Were Found!\n");

    }

    return 0;
}






int main(void) {
drone_info droneinfo[10];

int choice, droneID, yrman, i, no_of_drones;
float dronemass, dronemaxdist, dronetopspd, droneload;
char dronename[20];
i = 0;
    FILE* inputfile = fopen("drone.txt", "r");
    if(inputfile == NULL)
    {
        perror("ERROR! ");
        exit(-1);
    }

//GAY CODE BELLOW
    while(fscanf(inputfile, "%d %19s %d %f %f %f %f", &droneID, dronename, &yrman, &dronemass, &dronetopspd, &dronemaxdist, &droneload)==7){
        if(ferror(inputfile)){
            perror("An error occurred: ");

        }

        droneinfo[i].drone_number = droneID;
        strcpy(droneinfo[i].drone_name, dronename);
        droneinfo[i].year_manufactured = yrman;
        droneinfo[i].mass = dronemass;
        droneinfo[i].top_speed = dronetopspd;
        droneinfo[i].max_distance = dronemaxdist;
        droneinfo[i].load_capacity = droneload;

        i++;
    }
    no_of_drones = i;

    fclose(inputfile);

    printf("Data:\n\n");
    for (i=0; i < no_of_drones; i++){
        printf("ID: %d Name: %s  Year: %d  Mass: %.2f  Top Speed: %.2f  Max Distance: %.2f Load Capacity: %.2f\n", 
        droneinfo[i].drone_number, droneinfo[i].drone_name, droneinfo[i].year_manufactured, droneinfo[i].mass, droneinfo[i].top_speed, droneinfo[i].max_distance, droneinfo[i].load_capacity);

    }

//GAY CODE ABOVE




do{

  printf("Please select an option:\n\n");
  printf("1. Input/update drone information\n");
  printf("2. Search a drone\n");
  printf("3. Simulate a drone delivery scenario\n");
  printf("4. Display simulation results\n");
  printf("5. Save drone information\n");
  printf("6. Save all results\n");
  printf("7. Exit\n\n");

  scanf("%d", &choice);

  switch(choice)
  {
    case 1:
    //Input Drone Function

    break;

    case 2:
    //Search Drone function
    searchDroneName(no_of_drones);

    break;

    case 3:
    //Simulate Drone function

    break;

    case 4:
    //Display simulation results function

    break;

    case 5:
    //Save drone information function

    break;

    case 6:
    //Save all results function

    break;

    case 7:
    // Exit, Breaks loop

    break;

    default:
     printf("\nInvalid choice! Please enter a number inbetween 1 and 7!\n\n" );
    break;


  }


} while (choice != 7);
  return 0;
}
#包括
#包括
#包括
#定义无人机计数10
类型定义结构{
国际无人机联合号;
char-drone_名称[20];
国际制造年;
双质量;
双顶速度;
双倍最大距离;
双负载容量;
}无人机信息;
内部搜索无人机名称(内部无人机){
无人机信息无人机信息[10];
int i,发现,numdrones;
字符名称选择[20];
numdrones=无人机数量;
//测试数据
printf(“数据:\n\n”);
对于(i=0;i
更改

int搜索无人机名称(无人机的int编号){
无人机信息无人机信息[10];

int-searchdrone-name(无人机信息*无人机信息,无人机数量){


您需要阅读更多关于变量、变量生存期和变量范围的内容。您有两个完全不相关的
droneinfo
变量。要将
droneinfo
main
函数传递到
searchDroneName
函数,您需要将其作为参数传递。非常感谢。My对函数和传递值的理解真的很糟糕。欣赏它:D
    case 2:
    //Search Drone function
    searchDroneName(no_of_drones);
    case 2:
    //Search Drone function
    searchDroneName(droneinfo, no_of_drones);