首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用户输入无效,程序不会崩溃并再次提示用户- refactoring cli项目

如果用户输入无效,程序不会崩溃并再次提示用户- refactoring cli项目
EN

Stack Overflow用户
提问于 2020-05-15 09:03:12
回答 1查看 38关注 0票数 0

使用SWAPI构建了starwars。我希望对我的代码进行分解,以便满足以下条件:

-At在程序中的任何点,如果用户输入无效的输入,程序不应该崩溃并提示用户重试

-The程序不应在任何时候退出,除非用户已显式选择退出

代码语言:javascript
复制
    def menu
    puts "Please select from a category below:" 
    StarwarsCLI::Category.all.each_with_index {|cat, i|

        puts "#{i + 1}. #{cat.name.capitalize} "

    }
    input = gets.chomp.to_i 
    category = StarwarsCLI::Category.all[input-1]
    StarwarsCLI::APIService.get_items(category)
    items = Module.const_get("StarwarsCLI::#{category.name.capitalize}").all

    if (input-1) == 0
        return list_people

    elsif (input-1) == 1
        return list_planets

    elsif (input-1) == 2
        return list_films

    elsif (input-1) == 3
        return list_species

    elsif (input-1) == 4
        return list_vehicles

    elsif (input-1) == 5
        return list_starships

    elsif input == "exit"
        exit 

    else
        puts "Not a valid option, choose another."
        return menu 
    end
end

在添加行之后

代码语言:javascript
复制
elsif input == "exit"
        exit 

    else
        puts "Not a valid option, choose another."
        return menu 

我的代码不再运行,错误消息是

代码语言:javascript
复制
Traceback (most recent call last):
    3: from bin/starwars:5:in `<main>'
    2: from /mnt/c/Users/skywalker/dev/flatiron/projects/StarwarsCLI/lib/star_wars/command_line_interface.rb:9:in `run'
    1: from /mnt/c/Users/skywalker/dev/flatiron/projects/StarwarsCLI/lib/star_wars/command_line_interface.rb:21:in `menu'
/mnt/c/Users/skywalker/dev/flatiron/projects/StarwarsCLI/lib/star_wars/api_manager.rb:17:in `get_items': undefined method `url' for nil:NilClass (NoMethodError)

如果有人介意解释到底出了什么问题,我真的需要一些帮助才能让这段代码运行。

我试图在第17行下面添加一个‘break if input ==’exit‘,但出现了一个错误’invalid break‘,所以我认为可以将它添加到底部

代码语言:javascript
复制
https://github.com/codyalvarez/starwars-api
EN

回答 1

Stack Overflow用户

发布于 2020-05-15 15:13:31

问题是这样开始的

代码语言:javascript
复制
input = gets.chomp.to_i

将输入的文本转换为Integer。如果用户输入'exit',to_i方法会将其转换为0。在此之后,您将在(input-1)中进行比较。因此,exit-input将为-1。作为最后一个比较,您询问是否为-1 == 'exit',当然这是一个例外。

如果你想保持这种奇怪的方式来处理用户输入,你必须检查-1来确定用户输入的是否是非整数值。当然,这意味着如果用户输入类似Hello Aunt!的内容,您的程序也将退出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61809972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档