2013-07-14 86 views
0

我知道,當您知道用戶將輸入什麼數據類型時,可以使用scanf()。如果該信息未知,並且您希望能夠處理任何類型,該怎麼辦?有沒有簡單的方法來完成這個?Objective C - 獲取未知類型的用戶輸入

即假設某個類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

看看[@encode()](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html) – CodaFi

+0

@CodaFi - 我想你我誤解了這個問題...... – CRD

回答

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.

1

是的,使用NSScanner。概述:

  • 首先以您希望的任何方式獲得您的輸入作爲NSString

  • 現在創建一個NSScanner使用+scannerWithString:+localizedScannerWithString:

  • 現在撥打各種scanX:方法;例如scanInteger:scanDouble:;以適當的順序;例如在整數之前查找浮點數;直到找到合適的字符串解釋。這些方法中的每一個都會返回一個BOOL,指示它是否成功解析值。

請注意,您不應該嘗試以這種方式區分同一類型的不同大小的值;將它們解析爲最大類型(例如NSDecimalNumber(如果您希望支持這些)或double用於浮點,long long用於整數),然後使用範圍檢查,如果您希望找到可代表該值的較小類型。