2010-07-10 62 views
11

我想讓用戶輸入一個字符串,然後將輸入分配給NSString。現在我的代碼如下所示:使用scanf與NSStrings

NSString *word; 

scanf("%s", &word); 

回答

7

scanf不適用於任何對象類型。如果你有一個C字符串並且想從它創建一個NSString,使用-[NSString initWithBytes:length:encoding:]

+0

如何創建c字符串?你可以編輯我的代碼,告訴我如何。 – Omar 2010-07-10 21:10:47

+0

C字符串是一個字符數組,所以你只需寫'char word [100]'。 – 2012-09-23 10:17:03

8

scanf函數讀入一個C字符串(實際上字符數組),就像這樣:

char word[40]; 

int nChars = scanf("%39s", word); // read up to 39 chars (leave room for NUL) 

您可以將字符數組轉換爲NSString的是這樣的:

NSString* word2 = [NSString stringWithBytes:word 
            length:nChars 
            encoding:NSUTF8StringEncoding]; 

然而 scanf僅適用於控制檯(命令行)程序。如果您嘗試在Mac或iOS設備上輸入內容,那麼scanf不是您想用來獲取用戶輸入的內容。

+0

'scanf'是否使用'char *'工作?我不想限制使用固定字符數組的輸入。 – raffian 2012-09-04 02:09:34

+0

@SAFX:是的,但使用scanf有風險,請參閱[詳細信息](http://stackoverflow.com/q/2430303/154803)。這就是爲什麼我使用了固定大小的緩衝區並限制了scanf中的長度。 – progrmr 2012-09-17 21:26:02

+0

@progrmr也許這是過時的?我爲stringWithBytes調用得到'不知道類方法'。 – sunny 2015-07-20 22:13:06

1

是的,但是sscanf可以,並且可能是複雜的NSString解析的一個很好的解決方案。

4

這是我會怎麼做它:

char word [40]; 
scanf("%s",word); 

NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding]; 
+0

注意:您不需要放置'&'由於單詞不是指針,並且是實際的字符數組。 – ManOx 2012-10-30 17:19:24

7

scanf函數不NSString的工作作爲scanf函數不上對象。它僅適用於基本數據類型,如:

  1. INT
  2. 浮動
  3. BOOL
  4. 焦炭

怎麼辦?

從技術上說,一個字符串是由一系列單個字符組成的。因此,要接受字符串輸入,您可以讀取字符序列並將其轉換爲字符串。

使用:

[NSString stringWithCString:cstring encoding:1]; 

這裏是一個工作示例:

NSLog(@"What is the first name?"); 
char cstring[40]; 
scanf("%s", cstring); 

firstName = [NSString stringWithCString:cstring encoding:1]; 

下面是上面代碼的說明,通過註釋評論:

  1. 您聲明一個變量稱爲CString的保存40個字符。
  2. 然後,您通過使用%s格式說明符告訴scanf期望一個字符列表。
  3. 最後,從被讀取的字符的列表中創建一個NSString對象

運行項目。如果你輸入一個單詞並按回車,程序應該輸出你輸入的同一個單詞。只要確保單詞少於40個字符;如果你輸入更多,你可能會導致程序崩潰 - 歡迎你自己測試一下!:]

攝影者:RW。

+2

如果你使用'NSUTF8StringEncoding'作爲編碼選項,而不是'1',可能會更好理解。 – 2014-06-01 14:04:15

+0

如何處理新的線條和空白? – anoop4real 2017-09-30 05:22:47

0

簡單的辦法就是

char word[40]; 
scanf("%39s", word); 
NSString* word2 = [NSString stringWithUTF8String:word]; 
1

也許這會爲你工作,因爲它接受字符串的空間爲好。

NSLog(@"Enter The Name Of State"); 
char name[20]; 
gets(name); 
NSLog(@"%s",name); 
0

NSFileHandle類是文件描述符的面向對象的包裝器。對於文件,您可以在文件中讀取,寫入和查找。

NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput]; 
NSData *inputData = [inputFile availableData]; 
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding];