我知道当您知道用户将输入什么数据类型时,可以使用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);
}
答案 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.
这将获得用户输入的任何数据,并将其相应的值放在int
,double
等中。例如,如果没有integerValue
,则返回0 。