目标C - 获取未知类型的用户输入

时间:2013-07-14 03:59:12

标签: objective-c types scanf

我知道当您知道用户将输入什么数据类型时,可以使用scanf()。如果该信息未知,并且您希望能够处理任何类型,该怎么办?有没有一种简单的方法可以实现这一目标?

即。假设某个课程whichClass和职能genericScan()

int main(int argc, const char * argv[]){

   whichClass *entry = [[whichClass alloc]init];

   genericScan(&entry);

   if(entry.isDouble())
      NSLog(@"You entered a double!");
   else if(entry.isFloat())
      NSLog(@"You entered a float!");
   else if(entry.isInteger())
      NSLog(@"You entered an integer!");
   else if (entry.isChar())
      NSLog(@"You entered a char!");
   else
      NSLog(@"Unknown data type!");

   return(0);
   }

2 个答案:

答案 0 :(得分:1)

是的,使用NSScanner。概括地说:

  • 首先以您希望的方式获取NSString的输入。

  • 现在使用NSScanner+scannerWithString:创建+localizedScannerWithString:

  • 现在调用各种scanX:方法;例如scanInteger:scanDouble:;以适当的顺序;例如在整数之前查找浮点数;直到找到合适的字符串解释。这些方法中的每一个都返回BOOL,表示它是否成功解析了值。

请注意,您不应该尝试以这种方式区分同类的不同大小的值;将它们解析为该类型的最大类型(例如NSDecimalNumber(如果您希望支持那些)或double表示浮点数,long long表示整数),然后根据需要使用范围检查找到可以代表价值的较小类型。

答案 1 :(得分:0)

我认为这会让你得到你的目标

char *data = malloc(sizeof(char *) * 256);
fgets(data, 256, stdin);
NSString *dataString = [NSString stringWithCString:data];
NSInteger intValue = [dataString integerValue];
// double d = [dataString doubleValue];, etc.

这将获得用户输入的任何数据,并将其相应的值放在intdouble等中。例如,如果没有integerValue,则返回0 。