/********************************************************* * From C PROGRAMMING: A MODERN APPROACH, Second Edition * * By K. N. King * * Copyright (c) 2008, 1996 W. W. Norton & Company, Inc. * * All rights reserved. * * This program may be freely distributed for class use, * * provided that this copyright notice is retained. * *********************************************************/ /* airmiles.c (Chapter 26, page 690) */ /* Determines air mileage from New York to other cities */ #include #include #include struct city_info { char *city; int miles; }; int compare_cities(const void *key_ptr, const void *element_ptr); int main(void) { char city_name[81]; struct city_info *ptr; const struct city_info mileage[] = {{"Berlin", 3965}, {"Buenos Aires", 5297}, {"Cairo", 5602}, {"Calcutta", 7918}, {"Cape Town", 7764}, {"Caracas", 2132}, {"Chicago", 713}, {"Hong Kong", 8054}, {"Honolulu", 4964}, {"Istanbul", 4975}, {"Lisbon", 3364}, {"London", 3458}, {"Los Angeles", 2451}, {"Manila", 8498}, {"Mexico City", 2094}, {"Montreal", 320}, {"Moscow", 4665}, {"Paris", 3624}, {"Rio de Janeiro", 4817}, {"Rome", 4281}, {"San Francisco", 2571}, {"Shanghai", 7371}, {"Stockholm", 3924}, {"Sydney", 9933}, {"Tokyo", 6740}, {"Warsaw", 4344}, {"Washington", 205}}; printf("Enter city name: "); scanf("%80[^\n]", city_name); ptr = bsearch(city_name, mileage, sizeof(mileage) / sizeof(mileage[0]), sizeof(mileage[0]), compare_cities); if (ptr != NULL) printf("%s is %d miles from New York City.\n", city_name, ptr->miles); else printf("%s wasn't found.\n", city_name); return 0; } int compare_cities(const void *key_ptr, const void *element_ptr) { return strcmp((char *) key_ptr, ((struct city_info *) element_ptr)->city); }