2016-02-13 9 views
6

Ich weiß, dass in STDIN und STDOUT, müssen wir ein Befehlszeilenprojekt in Xcode. Aber wie nehme ich eine Standardeingabe in Spielplatz.Wie STDIN in Swift Spielplatz zu nehmen

Jedes Mal, wenn ich versuche, einen solchen Code auf dem Spielplatz zu laufen

var input = readLine()! 

habe ich immer diesen Fehler

Ausführung unterbrochen wurde, Grund: EXC_BAD_INSTRUCTION (Code = EXC_l386_INVOP, Subcode = 0x0)

Ist es möglich, STDIN im Spielplatz oder nicht zu nehmen?

UPDATE

Ich weiß, dass dieser Fehler wegen nilinput Variable ist aber wollen wissen, wie diese Null-Wert zu überwinden.

+0

Mögliche Duplikat [Swift Zusatz: Ausführung unterbrochen wurde, Grund : EXC \ _BAD \ _INSTRUCTION (Code = EXC \ _l386 \ _INVOP, Untercode = 0x0)] (http: // stackoverflow.com/questions/35347755/swift-addition-execution-wurde-unterbrochen-reason-exc-bad-instruction-code-exc) –

+0

nein ist es nicht - Ich erwarte, wie man STDIN auf Spielplätzen nimmt, diese Frage ist ein bisschen anders . @HenrikGustafsson –

Antwort

1

Zum Abrufen von Eingabe über die Befehlszeile, wie Console.ReadLine ... Chalkers hat eine Lösung wie folgt.

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

bitte fragen Sie weiter, wenn es Vinod nicht funktioniert.

+0

nein diese Funktion input() ist dasselbe wie readLine(). Ich bin besorgt darüber, wie die Standard-Eingabe von Benutzer in Spielplatz bekommen –

2

Versuchen Optional Chaining mit:

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

Offensichtlich wird dies "Keine Eingabe. \ N" in Spielplatz drucken. Aber es kann nicht die Antwort auf meine Frage sein. Ja, es war ein netter Trick –

+0

Soweit ich weiß, ist es nicht möglich, Standard-Eingabe von Spielplatz zu verwenden. Dies ist nur eine Möglichkeit, das Null-Problem zu umgehen. Es sollte funktionieren, wenn Sie es außerhalb des Spielplatzes obwohl laufen. –

+0

können Sie mir sagen, warum dieser Code funktioniert 'var input = readLine()' und warum nicht diese 'var input = readLine()!' In Spielplatz. –

3

Fest Lösung für SWIFT 3

, damit es funktioniert, Erstellen Sie ein neues Werkzeug Projekt Befehlszeile.

Gehe zu "Datei" -> "Neu" -> "Projekt" -> "macOS" -> "Command Line Tool".

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!))") 

Und das Projekt und führen mit CMD + R

-1

Zum

Neu> Projekt> MacOs> Command Line Tool

dann können Sie sich bewerben:

let Wert1: String?

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

„“ für den Standardwert

1

Spielplatz nicht eine Eingabe von der commend Zeile gelesen.

Sie eine benutzerdefinierte verwenden können „readline()“ Funktion und eine globale Eingangsgröße, jedes Element in dem Eingangsfeld präsentiert eine Linie:

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 
+0

Dies ist eine großartige Lösung für Websites wie HackerRank, wenn Sie einen Xcode Playground verwenden, um an Ihrem Code zu arbeiten. –