如何通过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
相关产品推荐
相关产品推荐

