2014-07-22 95 views
0

我正在製作一個程序,您必須在控制檯中輸入某些內容,然後按下視圖控制器上的按鈕後,它將在控制檯中進行打印。當我運行它時,提示被打印出來,但是當我按下按鈕時輸入不會被打印回來。這是我的看法Controller.m或者掃描後不出現Charf

#import "ViewController.h" 

@interface ViewController() 

@end 

char word[40]; 
@implementation ViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 

     NSLog(@"Please enter a word."); 
    // 1 
    char cstring[40]; 

    // 2 
    scanf("%s",cstring); 

    // 3 
    NSString *inputString = [NSString stringWithCString:cstring encoding:1]; 



    } 
    return self; 
} 

- (IBAction)changeText:(id)sender{ 

NSLog(@"You entered the word '%@'", inputString); 

} 

@end 
+0

「控制檯」是什麼意思?可能是這種情況(我必須檢查)iOS實際上沒有設置從控制檯讀取stdin。 – neal

+0

@neal通過控制檯我指的是箭頭指向鏈接圖片中的東西;對不起,如果這不是它通常所稱的,我不確定它的名字是什麼。[link](http://www.cimgf.com/wp-content/uploads/2012/12/Screenshot-121212 -1219-AM.png) – TheIntern

+0

這就是lldb控制檯,lldb正在您的mac上運行,並通過網絡與您的設備通話。你不能像這樣混合tty控制檯I/O。 – trojanfoe

回答

0

我敢肯定,iOS不適用於iOS應用程序設置的標準輸入,或者,如果是這樣,它不是一個非常直接的方式(即標準C庫函數的輸入不太可能工作)。嘗試讀取scanf的返回值,然後使用NSLog() - 您將在任何輸入字符串之前看到您的日誌語句:

int ret = scanf(「%s」,word); NSLog(@「%d」,ret);

我在XCode 6/iOS 8 beta4上,我將-1看作scanf()的返回值。

一個更好的方式來完成你正在做的事情是有一個TextField並在按鈕推動的動作內讀取該字段的值。另外,你應該像「viewWillAppear」或「viewDidLoad」那樣做,而不是initFromNib,因爲你可以保證在那個時候網點設置正確。