Как использовать scanf для вызова элемента в массиве? - PullRequest
0 голосов
/ 01 августа 2011

Моя проблема / вопрос в основном: как мне использовать scanf для вызова элемента в массиве.

и более подробно:

Я хочу сделать простое приложение, которое дает подробностидомов на улице.Я хочу массив / словарь или аналогичный, который содержит;

тип дома: террасный, отдельно стоящий и т. Д. (Строка)

номер дома: (int)

Комнаты: количествокомнаты в доме (int)

площадь помещения: в футах квадрат.(int)

жителей: количество людей, живущих в доме.(int)

и т. д.

Я хочу попросить пользователя ввести номер дома (на данный момент в консоли, но позже, используя пользовательский интерфейс iPhone), а затем получить сведения об этом свойстве.Иногда я хотел бы рассказать все подробности, иногда одну или две.

Я новичок в программировании, но изучал нагрузки и узнал о массивах, словарях и списках.Кажется, я мог бы использовать любой из них по-разному, но я думаю, что лучший способ - это использовать комбинацию.

Я думаю организовать все это в виде списка, используя NSDictionary для хранения деталей каждого дома.а затем положить все дома в массив.поэтому в массиве houseNo1, houseNo2, houseNo3 и т. д. тогда каждый дом / элемент в массиве будет словарём с ключами;тип дома, комнаты, площадь и т. д.

Я думаю, что если я приведу номер дома в соответствие с номером элемента в массиве, то, когда пользователь вводит «3», он берет число «3» и вытягиваетинформация из item3 в массиве, т.е.houseNo3.

Я пытался сделать это, используя scanf и назначая их выбор для int с именем userInput, но я не могу понять, как заставить программу затем использовать userInput, чтобы выбрать, какой элемент в массивевыбрать.

* Я не забыл, что массивы начинаются с 0, кстати, я полагаю, что могу просто присвоить строке item0 фразу «нет домов с номером двери 0» или что-то подобноеэти строки.

Надеюсь, я ясно дал понять, я могу объяснить больше, если это будет необходимо.Любая помощь будет принята с благодарностью.:)

ура Крис

пс.Я понимаю, как собрать массив / словарь / plist вместе, это просто scanf для извлечения данных из массива, с которыми у меня возникли проблемы.- просто не хотел, чтобы кто-нибудь писал строки кода, объясняющие это без необходимости.

Ответы [ 2 ]

0 голосов
/ 03 августа 2011

Это было именно то, что мне было нужно, спасибо.

Я использовал его, чтобы сделать эту маленькую программу, она работает так, как я хотел, но не уверен, что сделал это наилучшим образом. Если у кого-то есть несколько свободных минут и фантазии, дайте мне обратную связь, это было бы круто!

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    //create the array
    NSMutableArray *housesArray = [NSMutableArray array];

    //create dictionaries
    NSMutableDictionary *house1Dict = [NSMutableDictionary dictionary];
    NSMutableDictionary *house2Dict = [NSMutableDictionary dictionary];
    NSMutableDictionary *house3Dict = [NSMutableDictionary dictionary];


    //put dictionaries in the array
    [housesArray insertObject: house1Dict atIndex:0];
    [housesArray insertObject: house2Dict atIndex:1];
    [housesArray insertObject: house3Dict atIndex:2];

    //populate the dictionaries
    [house1Dict setObject:@"1" forKey:@"House number"];
    [house1Dict setObject:@"semi-detached" forKey:@"House type"];
    [house1Dict setObject:@"5" forKey:@"rooms"];
    [house1Dict setObject:@"1,525" forKey:@"floor space"];
    [house1Dict setObject:@"sea" forKey:@"view"];
    [house1Dict setObject:@"friendly" forKey:@"neighbours"];

    [house2Dict setObject:@"2" forKey:@"House number"];
    [house2Dict setObject:@"detached" forKey:@"House type"];
    [house2Dict setObject:@"8" forKey:@"rooms"];
    [house2Dict setObject:@"2,685" forKey:@"floor space"];
    [house2Dict setObject:@"car park" forKey:@"view"];
    [house2Dict setObject:@"nosy" forKey:@"neighbours"];

    [house3Dict setObject:@"3" forKey:@"House number"];
    [house3Dict setObject:@"detached" forKey:@"House type"];
    [house3Dict setObject:@"2" forKey:@"rooms"];
    [house3Dict setObject:@"585" forKey:@"floor space"];
    [house3Dict setObject:@"rear" forKey:@"view"];
    [house3Dict setObject:@"drunk" forKey:@"neighbours"];


    //check its all there
    /*NSLog(@"in the array is%@", housesArray);
    NSLog(@"at index 0 is %@", [housesArray objectAtIndex:0]);
    NSLog(@"at index 1 is %@", [housesArray objectAtIndex:1]);*/

    int inputInteger;
    id myHouse;
    printf("Which house are you interested in viewing?");
    scanf("%d", &inputInteger);

    myHouse = [housesArray objectAtIndex:(inputInteger-1)];

    NSLog(@"House number %d is %@, has %@ rooms, beautiful %@ views and %@ neighbours.",
          inputInteger, 
          [myHouse objectForKey:@"House type"],
          [myHouse objectForKey:@"rooms"],
          [myHouse objectForKey:@"view"],
          [myHouse objectForKey:@"neighbours"]);

    [pool drain];
    return 0;
}
0 голосов
/ 01 августа 2011

Привет и добро пожаловать в программирование!Что касается первоначального использования scanf и переключения на пользовательский интерфейс iPhone, то на самом деле все будет по-другому, так как scanf - это метод C, а в iOS вы будете получать объект NSString от пользователя (из UITextView или любого другого, который вы используете, чтобы позволить им вводить данные).).Чтобы получить число из scanf из консоли, используйте что-то вроде

int inputInteger;  
printf("Enter a number:");
scanf("%d",&inputInteger);
myHouse = [myArray objectAtIndex:inputInteger];

Обратите внимание, что приведенное выше не проверяет ошибки и не проверяет правильность ввода (что на самом деле это был введенный номер).

Говорят, что для получения целого числа (примитива) из строки NSSt вы можете использовать что-то вроде int inputInteger = [myInputString intValue];, а затем использовать inputInteger для перехода к этому индексу в NSArray, как указано выше.

Как общее программирование в стороне: вы должны привыкнуть к индексированию массива, начинающемуся с 0, если пользователь вводит «1» и ожидает, что это будет первый элемент, вы можете просто вычесть 1 из целого числа, которое вы получили вышеуказанными методами, а затемиспользуйте это для индексации вашего массива (так что это будет действительно то, что находится в индексе 0, первое значение в массиве)

...