2014-07-22 56 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,因为你可以保证在那个时候网点设置正确。