【问题标题】:How to test a C program with multiple inputs? [closed]如何测试具有多个输入的 C 程序? [关闭]
【发布时间】:2018-09-12 19:28:18
【问题描述】:

我有 Linux Ubuntu,我想测试我的程序,为此有人给了我多个输入的 .txt 文件。现在我想用 .txt 文件中的输入来运行这个程序。有很多输入,所以我不想手动输入。 Linux终端中是否有一些命令可以运行将输入写入文件的C? 谢谢你的回答

【问题讨论】:

  • 在代码中有一个循环,它使用 scanf 逐行读取文本文件中的每个输入。试试./main < input.txt 其中./main 是你的可执行文件
  • man bash。 ...
  • 一个文本文件包含不同的输入,您想为每个输入运行一次程序吗?文本文件中的输入是如何分隔的?您的程序是在命令行上还是从标准输入中获取这些“输入”?
  • 它从标准输入中获取它们,每个输入都在 .txt 文件中的自己的行中

标签: c ubuntu testing input terminal


【解决方案1】:

我认为您正在遭受“标准输入”==“键盘”的常见误解。别这么想了。如果您已经编写了一个从标准输入读取的程序,那么您需要做的就是将您的文本文件与标准输入相关联。在 shell 中,您可以使用重定向运算符:

./a.out < input.txt

如果您有多个输入,您可以轻松地分别调用您的程序:

for file in *.txt; do
    echo "Running on input: $file"
    ./a.out < "$file"
done

或者您可以在所有输入上运行一次程序:

cat *.txt | ./a.out

有很多很多方法可以做您想做的事,并且可以灵活地做不同的事情。您可能希望将程序的输出与预期的输出进行比较,然后您就可以编写一个完整的测试套件了。例如:

if ! ./a.out < input.txt | cmp expected-output -; then
    echo "TEST FAILED" >&2
    exit 1
fi

【讨论】:

  • 是的,我尝试了第一个,但它说 bash: ./a.out: Permission denied,我现在该怎么办?
  • 检查您的文件的权限。从错误消息中,我猜你需要做chmod +x a.out
  • 什么是a.out?这是我的 c 程序吗?
  • a.out 是许多编译器生成的可执行文件的默认名称,如果您不提供名称。您应该用您选择的任何名称替换它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 2014-07-03
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多