Как я могу убедиться, что пользователи вводят число, а не строку? - PullRequest
1 голос
/ 12 июня 2019

Я ожидаю, что пользователь введет номер. Если пользователи вводят символ, я хочу выдать ошибку.

Я попытался разобрать значения.

def pruefeZeitbudget(eingabeZeitaufwand)
    @validierungsWert = eingabeZeitaufwand.to_f
    loop do
      if @validierungsWert > 24
        puts 'Wert überschreitet das Tagesmaximum von 24 Stunden. Erneute Eingabe!'
        @validierungsWert = gets.chomp.to_f
      else
        puts 'Eingabe okay.'
        break
      end
    end

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Вы можете использовать Float(eingabeZeitaufwand).Это вызовет ошибку, если ввод неверный тип Float.В противном случае возвращается значение с плавающей запятой.

Полный код должен выглядеть так:

def pruefeZeitbudget
  begin 
    @validierungsWert = Float(gets.chomp)
    loop do
      if @validierungsWert > 24
        puts 'Wert überschreitet das Tagesmaximum von 24 Stunden. Erneute Eingabe!'
      else
        puts 'Eingabe okay.'
        break
      end
    end
  rescue
    puts "Invalid input"
  end
end
1 голос
/ 12 июня 2019

Строки приводят к значению 0.0 при запуске их через .to_f, поэтому добавление оператора или, для которого число должно быть больше 1, должно гарантировать, что строки не будут введены.

def pruefeZeitbudget(eingabeZeitaufwand)
    @validierungsWert = eingabeZeitaufwand.to_f
    loop do
      if @validierungsWert > 24 or @validierungsWert < 1 
        puts 'Wert überschreitet das Tagesmaximum von 24 Stunden. Erneute Eingabe!'
        @validierungsWert = gets.chomp.to_f
      else
        puts 'Eingabe okay.'
        break
      end
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...