Я новичок в быстром программировании. Я компилирую свои программы в Windows или онлайн-компиляторе. Я застрял в быстром чтении целого числа. Я успешно прочитал целое число с консоли. Но я не могу использовать эту целочисленную переменную в цикле while. Как я могу использовать целочисленную переменную в цикле while, который читается с консоли? моя попытка:

import Foundation

print("Enter a number:")


let inputNumber = Int(readLine()!)
if let inputNumber = inputNumber {
    print(inputNumber)
}


if inputNumber == 3 {
    print("number = 3") }
    else { print("number != 3") }

var sayi = inputNumber  
if sayi == 3 {
    print("sayi = 3") }
    else { print("sayi != 3") }
    
while sayi > 0 {
        print("*", terminator:"")
        sayi = sayi - 1 }

Ошибки компиляции:

Main.swift: 21: 12: ошибка: бинарный оператор '>' не может применяться к операндам типа 'Int?' и 'Int'

А sayi> 0 {~~~~ ^ ~

Main.swift: 21: 12: примечание: существуют перегрузки для '>' с этими частично совпадающими списками параметров: (Self, Self), (Self, Other)

А sayi> 0 {^

Main.swift: 23: 16: ошибка: значение необязательного типа 'Int?' не развернутый; вы хотели использовать '!' или же '?'? Sayi = Sayi - 1

0
crazy computer 15 Окт 2020 в 15:27

1 ответ

Лучший ответ

Проблема в том, что inputNumber и sayi являются необязательными значениями, и компилятор считает Int и Int? разными типами, которые он не может сравнивать.

Я бы использовал следующую логику для чтения и преобразования пользовательского ввода

let inputNumber: Int
//The below if clause will be successful only if both deadline() and Int() returns non-nil values
if let input = readLine(), let value = Int(input) { 
    inputNumber = value
} else {
    print("Bad input")
    inputNumber = 0
}

И тогда остальной код будет работать (здесь я его несколько упростил)

var sayi = inputNumber

sayi == 3 ? print("sayi = 3") : print("sayi != 3")

while sayi > 0 {
    print("*", terminator:"")
    sayi -= 1
}
1
Joakim Danielson 15 Окт 2020 в 13:04