0

我知道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);
   }
4

2 回答 2

1

是的,使用NSScanner. 概述:

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

  • 现在创建一个NSScannerusing +scannerWithString:or +localizedScannerWithString:

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

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

于 2013-07-14T05:12:45.280 回答
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。

于 2013-07-14T04:17:04.690 回答