【问题标题】:C Programming: Creating a Program to Pull Latitude and Longitude from a typedef structC 编程:创建一个程序以从 typedef 结构中提取纬度和经度
【发布时间】:2014-10-01 18:41:05
【问题描述】:

所以我为我的班级有一个项目,我需要编写一个程序,用户将在其中输入一个城市,然后程序将从 typedef 结构中查找该城市,然后打印该城市的经纬度坐标。我的想法是将城市名称作为输入,然后以某种方式将城市名称与结构中的名称(可能是指针?)进行比较,然后获得城市匹配时的纬度和经度。我认为我需要创建一个循环程序来读取数据,直到找到匹配项。你能告诉我我是否在正确的轨道上,或者你将如何编写程序?如果有人想尝试一下,我附上了一小部分结构(完整的有 200 个城市)。

  #define MAX_CITY_LEN   35

   typedef struct { 
            char  name[MAX_CITY_LEN];
            float latitude;
            float longitude;
           } PLACE_T;

   PLACE_T places[] =
     {{"Aberdeen,Scotland",57.15,-2.15},
      {"Adelaide,Australia",-34.92,138.6},
      {"Albany,NY,USA",42.67,-73.75},
      {"Albuquerque,NM,USA",35.08,-106.65},
      {"Algiers,Algeria",36.83,3.0},
      {"Amarillo,TX,USA",35.18,-101.83},

谢谢, 亚历克斯

【问题讨论】:

  • 您在正确的轨道上——除了您的措辞“...以某种方式比较城市名称..”。这是否意味着您不知道(零、zilch、nada)如何在 C 中做到这一点?

标签: c


【解决方案1】:

这样做:

 typedef struct { 
            char  name[MAX_CITY_LEN];
            float latitude;
            float longitude;
 } PLACE_T;

 PLACE_T places[] ={
      {"India,kochi",57.15,-2.15},
      {"Adelaide,Australia",-34.92,138.6},
      {"Albany,NY,USA",42.67,-73.75},
      {"Albuquerque,NM,USA",35.08,-106.65},
      {"Algiers,Algeria",36.83,3.0},
      {"Amarillo,TX,USA",35.18,-101.83},
   };

int main(){
   int j;
  int found=0;
  char city[MAX_CITY_LEN];
  printf("enter city name:");
  fgets(city,MAX_CITY_LEN,stdin);
  city[strlen(city)-1]='\0';
  int citySize=(sizeof(places)/sizeof(places[0]));
  for(j=0;j<citySize;j++){
     if(strcmp(city,places[j].name)==0){
        found=1;                                
        printf("lat = %f, long = %f",places[j].latitude,places[j].longitude); 
        break;                              
     }
   }
   if(!found)
     printf("City not found");

    return 0;

}

【讨论】:

  • 问题标记为 C,使用 printfscanf 代替 cincout ;)
  • @Rustam 1) 如果用户输入的名称超过 35 个字符 (MAX_CITY_LEN)?结果是什么?如果程序崩溃,一个是幸运的。 2) 由于gets() 不能防止用户输入超限,它会招致黑客的利用。 3) 在 C11 中不再可用(即最近 3 年)。
  • 如果 scanf("%s",&amp;city) 如果有空格 b/w 城市名称,它将不会读取。我的ryt?
  • in scanf("%s",&amp;city) &amp;citycity 有什么不同吗? @indiv 这里&amp; 是可选的
  • @indiv 不,因为我使用的是fgets(),它也添加了'\n'。所以要删除我添加的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
相关资源
最近更新 更多