Как использовать scanf для вызова элемента в массиве?

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

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

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

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

номер дома: (инт)

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

площадь пола: в квадратных футах. (целое)

резидентов: количество людей, проживающих в доме. (целое)

и Т. Д.

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

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

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

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

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

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

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

ура Крис

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


person Kris    schedule 01.08.2011    source источник


Ответы (2)


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

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

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

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

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

person Jesse Naugher    schedule 01.08.2011
comment
Спасибо за быстрый ответ и теплый прием Джесси. Ваш ответ имеет смысл, теперь я вижу, что я делал неправильно. Я попробую немного позже и дам вам знать, как у меня дела. Еще раз спасибо. - person Kris; 01.08.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;
}
person Kris    schedule 02.08.2011