swift2 如何在SwiftPlayground参加STDIN考试

0qx6xfy6  于 2022-11-23  发布在  Swift
关注(0)|答案(5)|浏览(306)

我知道要在STDIN和STDOUT中编程,我们需要在Xcode中创建一个命令行项目。但是我如何在playroom中获取标准输入呢?
每当我在操场上尝试运行这样代码时

var input = readLine()!

我总是得到这个错误
执行被中断,原因:EXC_错误指令(代码=EXC_l386_INVOP,子代码=0x0)
是否可以在Playground参加STDIN考试?

更新

我知道这个错误是因为nilinput变量,但我想知道如何克服这个nil值。

u59ebvdq

u59ebvdq1#

SWIFT 3的固定解决方案

若要让它运作,请建立新的命令列工具项目。
进入“文件”-〉“新建”-〉“项目”-〉“macOS”-〉“命令行工具”。

import Foundation

print("Hello, World!")

func solveMefirst(firstNo: Int , secondNo: Int) -> Int {
    return firstNo + secondNo
}

func input() -> String {
    let keyboard = FileHandle.standardInput
    let inputData = keyboard.availableData
    return NSString(data: inputData, encoding:String.Encoding.utf8.rawValue) as! String
}

let num1 = readLine()
let num2 = readLine()

var IntNum1 = Int(num1!)
var IntNum2 = Int(num2!)

print("Addition of numbers is :  \(solveMefirst(firstNo: IntNum1!, secondNo: IntNum2!))")

并使用CMD + R运行项目

kmynzznz

kmynzznz2#

Playground无法从命令行读取输入。
你可以使用一个自定义的“readLine()”函数和一个全局输入变量,输入数组中的每个元素都呈现一行:

import Foundation

var currentLine = 0
let input = ["5", "5 6 3"]

func readLine() -> String? {
    if currentLine < input.endIndex {
        let line = input[currentLine]
        currentLine += 1
        return line
    } else {
        return nil
    }
}

let firstLine = readLine() //  5
let secondLine = readLine() // 5 6 3
let thirdLine = readLine() // nil
7cwmlq89

7cwmlq893#

尝试使用Optional Chaining

if let input = readLine() {
    print("Input: \(input)")
} else {
    print("No input.")
}
9vw9lbht

9vw9lbht4#

前往
新建〉项目〉MacOs〉命令行工具
则可以应用:
字母值1:字符串?

value1 = readLine()
print(value1 ?? "")

默认值为“”

vltsax25

vltsax255#

对于从命令行获取输入,如Console.ReadLine... Chalkers 有一个解决方案,如下所示。

func input() -> String {
    var keyboard = NSFileHandle.fileHandleWithStandardInput()
    var inputData = keyboard.availableData
    return NSString(data: inputData, encoding:NSUTF8StringEncoding) as! String
}

如果不行,请再问一次,Vinod.

相关问题