如何在Shell中检查STDIN用户输入的正确数量?

时间:2019-05-02 08:40:24

标签: php

我正在尝试解决一个问题,您编写脚本然后得到:

  1. 具有5个整数用户输入的多个测试用例
  2. 一个测试案例,其中一个为0

我想检查用户输入的数量,然后确定要执行的代码。

类似这样的东西:

if(fscanf(STDIN, '%d%d%d%d%d', $a, $b, $c, $d, $e) == 5) {
        echo "Five inputs";
    } elseif(fscanf(STDIN, '%d', $a) == 1) {
        echo "Only one input";
    }

因此,例如,如果获得输入1 2 3 4 5,则应回显“五个输入”,但是如果仅获得0,则应回显“仅一个输入”。

1 个答案:

答案 0 :(得分:0)

您的代码有两个问题。第一个是您使用explode()进行扫描,这是在寻找一个连续的数字,您至少必须在其中留有空格来分隔值。第二个是如果失败,它将再次要求输入以进行单个输入检查。

此代码从输入中读取一行,然后将其拆分(使用count($inputs))。中位只是检查数值,您可以根据需要进行调整。然后,最后一部分仅检查(使用$input = fgets(STDIN); $inputs = explode(" ", $input); // Check numeric foreach ( $inputs as $index => $check ) { if ( !is_numeric($check) ) { echo "Input $index is not numeric".PHP_EOL; } } if(count($inputs) == 5) { echo "Five inputs"; } elseif(count($inputs) == 1) { echo "Only one input"; } 有多少部分,并输出相应的消息。

def find_items(self, response, names, finder):
    items = response.meta['items']
    for name, find in zip(names.values(), finder.values()):
        items[name] = response.css(find).extract()
    yield items  # <- yield after loop