[英]Xcode command line tool for calculator
我想使用XCode/OSX application/Command line tool/Foundation
类型创建命令行计算器。 在XCode中,转到Products/Scheme/Edit Scheme
。 在此,我们可以添加或删除命令行参数。 这些命令行参数存储在参数向量argv[]
。
我正在使用NSArray
将这些参数存储在Objective-C数组中。
现在,我想制作一个可以评估表达式的计算器。
例如,我的参数是argv[1]=5
, argv[2]=+
, argv[3]= 10
, argv[4]=-
, argv[5]=2
。 因此,这些参数将评估表达式并给出结果。 结果= 13 。
#import <Foundation/Foundation.h>
int main(int argc, const char* argv[])
{
@autoreleasepool {
NSArray *myarray =[[NSProcessInfo processInfo] arguments];
for (int i=1; i<argc ; i++) {
NSLog (@"Arguents %d=%@", i, myarray[i]);
}
return 0;
}
}
这是一个简单的计算器,几分钟后就被淘汰了:
#import <Foundation/Foundation.h>
typedef enum {
OP_NONE,
OP_ADD,
OP_SUB,
OP_MULT,
OP_DIV
} Op;
static int calc(NSArray *args) {
Op op = OP_NONE;
int result = 0;
for (NSString *arg in args) {
if ([arg isEqualToString:@"+"]) {
op = OP_ADD;
} else if ([arg isEqualToString:@"-"]) {
op = OP_SUB;
} else if ([arg isEqualToString:@"*"]) {
op = OP_MULT;
} else if ([arg isEqualToString:@"/"]) {
op = OP_DIV;
} else {
int value = [arg intValue]; // NO ERROR CHECKING!!!
switch(op) {
case OP_ADD: result += value; break;
case OP_SUB: result -= value; break;
case OP_MULT: result *= value; break;
case OP_DIV: result /= value; break;
case OP_NONE: result = value; break;
default: abort();
}
op = OP_NONE;
}
}
return result;
}
int main(int argc, const char **argv) {
@autoreleasepool {
NSMutableArray *args = [NSMutableArray new];
for (int i = 1; i < argc; i++)
[args addObject:@(argv[i])];
NSLog(@"result = %d", calc(args));
}
return 0;
}
编译:
$ clang -DDEBUG=1 -g -fobjc-arc -o calc calc.m -framework Foundation
测试:
typhon:tinkering (master) $ ./calc 3 + 9
2014-04-26 13:23:05.628 calc[8728:507] result = 12
typhon:tinkering (master) $ ./calc 2 / 1
2014-04-26 13:23:20.500 calc[8738:507] result = 2
typhon:tinkering (master) $ ./calc 99 / 11
2014-04-26 13:23:25.364 calc[8742:507] result = 9
typhon:tinkering (master) $ ./calc 99 / 12
2014-04-26 13:23:27.740 calc[8746:507] result = 8
typhon:tinkering (master) $ ./calc 99 \* 11
2014-04-26 13:23:53.588 calc[8754:507] result = 1089
笔记:
\\*
因为*
是进行Shell遍历的符号。 NSProcessInfo
即可将命令行参数传递给main()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.