【问题标题】:ObjectiveC - Read from console string with multiple lines (Breaks\newLine)目标 C - 从控制台字符串中读取多行 (Breaks\newLine)
【发布时间】:2013-03-27 15:21:05
【问题描述】:

objectiveC 有没有办法从控制台中的用户输入中读取多行字符串? 我正在 Xcode 中制作一个简单的控制台应用程序,我希望人们能够粘贴可能只有几行的 SQL 查询。

目前我正在使用:

char strIn[512];
NSMutableString* str;
scanf("%[^\n]", strIn);
str = [NSString stringWithUTF8String:strIn];
NSLog(@"\n%@",str);

但这只会得到第一行。 请记住 - 这不是从文件中读取,而是从控制台读取。 谢谢。

【问题讨论】:

  • 你要输入多少行?还是要输入到EOF?或者您将如何确定何时停止?
  • 嗨,假设用户将 SQL 查询粘贴到控制台中,而不是文件中,例如从学生中选择姓名,工作表中 a=b
  • 所以也许扫描到关闭“;”?
  • 是的,但是如果超过 1 行,我怎样才能得到整个表达式?
  • @user2216210 使用fread()fgets()

标签: objective-c string console-application newline scanf


【解决方案1】:

以下代码应该可以帮助您入门。它从标准输入读取并收集inputString 变量中的输入行,直到找到分号。

NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput];
NSMutableString *inputString = [NSMutableString string];

do {
    // Read from stdin, check for EOF:
    NSData *data = [inputFile availableData];
    if ([data length] == 0) {
        NSLog(@"EOF");
        break;
    }
    // Convert to NSString, replace newlines by spaces, append to current input:
    NSMutableString *tmp = [[NSMutableString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    [tmp replaceOccurrencesOfString:@"\n" withString:@" " options:0 range:NSMakeRange(0, [tmp length])];
    [inputString appendString:tmp];
    // Check for semi-colon:
} while ([inputString rangeOfString:@";"].location == NSNotFound);

NSLog(@"input=%@", inputString);

(请注意,此示例代码仅检查输入中某处的分号。它不检查分号是否例如嵌入在字符串中。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 2018-06-18
    相关资源
    最近更新 更多