如何为需要 4 个数字输入的 C 程序编写 Bash 脚本? [复制]

Posted

技术标签:

【中文标题】如何为需要 4 个数字输入的 C 程序编写 Bash 脚本? [复制]【英文标题】:How do I write a Bash script for a C program that takes 4 numerical inputs? [duplicate] 【发布时间】:2020-12-24 19:37:23 【问题描述】:

我正在为一个 c 程序编写一个 bash 脚本,该程序要求输入 4 个数字引脚。但是,当我编写脚本时,输出似乎在循环中运行,但它并没有中断它被识别为程序将接受的正确数字的位置。

#!/bin/bash

RANGE=9000
count=$RANDOM:0:4

while [[ "$count" -le $RANGE ]]
do
    number=$RANDOM
    (( "number %= $RANGE" ))
    echo $number
    if [[ "$count" == "$RANGE" ]]; then
        break
    fi
done

当我运行它时,我可以在输出中看到一些返回为 2 或 3 位的数字,而不是 4。所以理论上,我想要做的是找到一个 4 位的随机数,程序将采取,但我不知道随机数是什么,所以本质上它是一种蛮力,或者只是我手动猜测密码。

【问题讨论】:

你为什么要把你的算术表达式放在引号里?只是(( number %= RANGE ));不需要$s 引号。 无论如何,如果你得到一个 3 位数字,这意味着第一个数字是 0;如果您得到一个 2 位数字,则 前两位 数字为 0。 ...顺便说一句,在这种情况下,不清楚您所说的“对于 C 程序”是什么意思。 这是一个要求输入数字的 c 程序。 c程序不是我自己写的。此外,当我在引号中键入算术表达式时,我仍然是 bash 的新手,但我会在以后的脚本中考虑到这一点。 【参考方案1】:

如果您只需要一个随机的 4 位数字,您可以这样做:

printf -v number "%04d" $((RANDOM % 10000))

$RANDOM 为您提供一个随机数 0..32767% 10000 将其转换为范围 0..9999(不是完美分布,但对于大多数用途来说应该足够好),并且printf 确保附加前导零(例如,您将看到0042 而不是42)。


您可以使用以下脚本对其进行测试:

(( total = 0 ))
(( bad = 0 ))
for i in 1..10000 ; do
    printf -v x "%04d" $((RANDOM % 10000))
    (( total += 1 ))
    [[ "$x" =~ ^[0-9]4$ ]] ||  echo Bad $x; (( bad += 1 )); 
done
(( good = total - bad ))
echo "Tested: $total, bad $bad, good $good"

应该给你:

Tested: 10000, bad 0, good 10000

【讨论】:

只要 OP 试图猜测一个数字,它可能无法猜测第一个数字为 0 的组合。 顺便说一句,考虑printf -v x '%04d' "$x" 而不是命令替换;使代码特定于 bash,但速度更快(而且它已经是特定于 bash 的)。 好点,@Charles,我已经在船上购买了它们,并进行了另一项轻微改进,将随机生成与printf 结合在一起。我不认为特定于 bash 是一个问题,因为这个问题是 tagged bash. 感谢您的帮助,这消除了有关脚本编写的一些困惑。我应该知道数字显示为 2 位的情况是这样的,当时我很确定我只要求一定范围的数字。

以上是关于如何为需要 4 个数字输入的 C 程序编写 Bash 脚本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Angular 4 - 如何为 type='input' 呈现 2 个小数位

如何为通用数字编写函数?

如何用C语言做一个24点游戏的程序?

c语言怎么出表格

如何为 C/C++ 编写二进制算法

c编程任意输入一个整数,要求计算并输出此整数的各位数字之和。如:231的各位之和是2+3+1。