我的问题/基本问题是:如何使用scanf来调用数组中的项目。
更详细:
我想制作一个简单的应用程序,详细介绍街道上的房屋。 我想要一个包含;
的数组/字典或类似字体房屋类型:梯田,分离等(字符串)
门牌号码:(int)
房间:房子里的房间数(int)
占地面积:以平方英尺为单位。 (INT)
居民:居住在这所房子里的人数。 (INT)等
我想要求用户输入门牌号码(现在在控制台中,但稍后使用iPhone UI),然后接收该属性的详细信息。有时我想提供所有细节,有时只有一两个。
我是编程新手,但一直在研究负载,并且已经了解了数组,字典和plists。我似乎可以以不同的方式使用其中任何一种,但我认为最好的方法是使用组合。
我正在考虑用plist组织它,使用NSDictionary存储每个房子的细节,然后将所有房屋放在一个数组中。 所以在数组中,houseNo1,houseNo2,houseNo3等 然后数组中的每个房子/项目都是带有键的字典;房屋类型,房间,地面空间等
我认为如果我将门牌号与阵列中的物品号匹配,那么当用户输入“3”时,它取数字'3'并从数组中的item3中提取信息,即。 houseNo3。
我一直在尝试使用scanf并将他们的选择分配给一个名为userInput的int,但我无法弄清楚如何让程序使用userInput来选择数组中的哪个项目来选择。
*顺便说一句,我没有忘记数组从0开始,我想我可以给item0分配一个字符串,上面写着“没有任何有门号为0的房子”或者沿着这些行的东西。
我希望我已经说清楚,如果需要,我可以解释更多。任何帮助将不胜感激。 :)
欢呼声 克里斯
PS。我理解如何将数组/字典/ plist放在一起,它只是scanf从我遇到问题的数组中检索数据。 - 只是不希望任何人写出不必要的代码解释。
答案 0 :(得分:0)
嘿,欢迎编程!至于最初使用scanf并切换到iPhone UI,它实际上会有很大的不同,因为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处的任何东西,数组中的第一个值)
答案 1 :(得分:0)
这正是我所需要的,谢谢你。
我用它来制作这个小程序,它按照我的意愿工作但不确定我是否以最好的方式解决了这个问题。如果有人有几分钟的闲暇和幻想给我一些很酷的反馈!
#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;
}