2016-02-13 4 views
6

Я знаю, что для программирования в STDIN и STDOUT нам нужно создать проект командной строки в Xcode. Но как я могу взять стандартный вход на детскую площадку.Как принять STDIN на игровой площадке Swift

Всякий раз, когда я пытаюсь запустить такой код в детской площадке

var input = readLine()! 

Я всегда получаю эту ошибку

выполнение было прервано, причина: EXC_BAD_INSTRUCTION (Code = EXC_l386_INVOP, субкодовое = 0x0)

Можно ли взять STDIN на детской площадке или нет?

UPDATE

Я знаю, что эта ошибка из-за нольinput переменная, но хочу знать, как преодолеть эту нулевую ценность.

+0

Возможный дубликат [Swift Сложение: выполнение было прервано, причина : EXC \ _BAD \ _INSTRUCTION (Код = EXC \ _l386 \ _INVOP, subcode = 0x0)] (http: // stackoverflow.com/questions/35347755/swift-addition-execution-was-interrupted-reason-exc-bad-instruction-code-exc) –

+0

нет его нет - я ожидаю, как взять STDIN на игровых площадках, этот вопрос немного отличается , @HenrikGustafsson –

ответ

1

Для получения ввода из командной строки, например Console.ReadLine ... Chalkers имеет следующее решение.

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

спрашивайте, если это не работает. Vinod.

+0

нет этой функции input() такая же, как readLine(). Я беспокоюсь о том, как получить стандартный ввод от пользователя на игровой площадке –

2

Попробуйте использовать Optional Chaining:

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

Очевидно, что это будет печатать «Нет ввода. \ N» на игровой площадке. Но это не может быть ответом на мой вопрос. Да, это был хороший трюк –

+0

Насколько я знаю, использовать стандартный вход с детской площадки невозможно. Это всего лишь способ обойти проблему nil. Он должен работать, как только вы запускаете его за пределами игровой площадки. –

+0

Можете ли вы сказать мне, почему этот код работает 'var input = readLine()' и почему бы не этот 'var input = readLine()!' В игровой площадке. –

3

Fixed решение для 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

-1

Перейти к

New> Project> MacOs> Command Line Tool

, то вы можете обратиться:

пусть значение1: String?

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

«» для значения по умолчанию

1

площадка не может считывать входные данные из воздаем линии.

Вы можете использовать пользовательские «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 
+0

Это отличное решение для использования на сайтах, таких как HackerRank, когда вы используете игровые площадки Xcode для работы над вашим кодом. –

 Смежные вопросы

  • Нет связанных вопросов^_^