You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过shell脚本向C程序可执行文件传递整数值输入参数

解决方案

错误原因

你之前的写法存在语法错误:

  • < 是文件输入重定向符,后面必须跟文件名,不能直接填写输入内容
  • << 是Here文档的起始标记,不符合你直接传入短输入的使用场景

你的C程序通过scanf读取标准输入的三个整数,只要把三个整数按空格分隔传入程序的标准输入即可,不需要单独存为文本文件。

最简写法(echo管道方案)

直接用echo输出三个整数,通过管道传递给./a.out即可,示例脚本如下:

# 测试用例1
echo "15 25 97" | ./a.out
# 测试用例2
echo "73 36 12" | ./a.out
# 测试用例3
echo "43 15 99" | ./a.out
# 测试用例4
echo "100 100 100" | ./a.out
# 测试用例5
echo "37 150 37" | ./a.out

如果需要区分每组测试的输出,可以加简单的提示:

echo "=== 测试用例1:15 25 97 ==="
echo "15 25 97" | ./a.out
echo -e "\n=== 测试用例2:73 36 12 ==="
echo "73 36 12" | ./a.out
# 剩下的测试用例同理

更简洁的Bash语法方案(Here字符串)

如果你用的是Bash shell,可以用Here字符串语法<<<,写法更短:

./a.out <<< "15 25 97"
./a.out <<< "73 36 12"
./a.out <<< "43 15 99"
./a.out <<< "100 100 100"
./a.out <<< "37 150 37"

这个语法会直接把<<<后面的字符串作为标准输入传递给程序,完全适配你C程序的scanf读取逻辑。

进阶:批量循环测试

如果后续测试用例会增加,可以把所有测试用例存到数组里循环执行,修改测试用例只需要调整数组内容即可:

# 所有测试用例存放在数组中,每个元素是一组三个整数
tests=(
"15 25 97"
"73 36 12"
"43 15 99"
"100 100 100"
"37 150 37"
)

# 循环执行所有测试
for i in "${!tests[@]}"; do
  echo "=== 测试用例$((i+1)):${tests[$i]} ==="
  echo "${tests[$i]}" | ./a.out
  echo "------------------------------------"
done

内容的提问来源于stack exchange,提问作者imtryin123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:45:02