你有一个根本性的错误,它吸引了许多C语言新手:
C中的数组下标从零开始,即数组无人机的第一个元素是“无人机[0]”。
这意味着当你的代码第二次执行main()for循环时,它会将数据写入数组的边界之外。这导致未定义的行为。快速解决方法是将for循环更改为:
for (a=0; a < 2; a++)
据我所知,你被困在这一部分。
为此你需要写一个 while(1){..} 与propr退出条件一样 break 等等
while(1){..}
break
剩下的工作归结为有多少只无人机?并访问和存储它们。
用于存储阵列结构就足够了。对于无人机的计数,您可以使用单独的变量。访问它们只不过是数组访问。
指南的伪代码:
#define MAXDRONES 10 int dronesCreated =0; while(1){ show _menu(); if( option is DRONE_CREATE){ if(dronesCreated<=MAXDRONES-1){ do_create();//increment NUM_OF_DRONES here. dronesCreated++; } else print appropriate message. else if(option is PRINT) print() else break; }
从直观的角度来看,理解程序的设计很简单。
您需要一个循环,因为您需要连续请求用户选项。这就是为什么循环。
你保留一个变量并检查何时 DRONE_CREATE 选项是否创建了10个无人机。如果是,那么不要调用函数,否则调用函数。
DRONE_CREATE
现在,当您使用无人机的全局结构数组时,您需要使用这样的计数变量。
int numberOfDrones = 0;然后使用如上所示的控件。
只需输入和输出它们的方式。
scanf("%s",drone[a].name); print("%s,%d",drone[a].name,drone[a].age);
for(int i=0;i<MAXDRONES;i++){ printf("What is the name of the drone?\n"); scanf("%s", drone[a].name); printf("What is the top speed of the drone? (kmph)\n"); scanf("%f", &drone[a].top_s); printf("What is the acceleration of the drone? (mpsps)\n"); scanf("%f", &drone[a].acc); printing(drone); }
#include <stdio.h> #include <stdlib.h> #include <string.h> #define DRONES 10 struct drone_t{ char name[30]; float top_s; float acc; }; void printing (struct drone_t dron[]); //no need to mention size while prototyping int main() { unsigned short cnt,choice; //char nam; //uneccessary variable struct drone_t drone[DRONES]; printf("Welcome to the drone travel time calculator\n"); do{ printf("1. Create Drone\n2. Calculate Time\n3. Exit\n:\t"); scanf("%d", &choice); switch(choice) { case 1: for (cnt=0; cnt < DRONES; cnt++) { printf("What is the name of the drone?\n"); scanf("%s",drone[cnt].name); printf("What is the top speed of the drone?(kmph)\n"); scanf("%f", &drone[cnt].top_s); printf("What is the acceleration of the drone?(mpsps)\n"); scanf("%f", &drone[cnt].acc); } printing(drone);//put this statement outside loop break; case 2: printing(drone); break; case 3: exit(EXIT_SUCCESS); default: printf("choose correct option :D"); break; } }while(choice!=3); //if explicitly using exit case then not needed } void printing (struct drone_t dron[10]) { unsigned short cnt; for (cnt=0; cnt < DRONES; cnt++) { printf("Name is: %s\n", dron[cnt].name); } }
注意:请勿使用 for(cnt=1;;) 它可能会导致类似问题 一个错误 所以更好地用于(cnt = 0 ;;)。
for(cnt=1;;)