对于从用户那里获取单个数字的程序,如何一次测试多个值,然后将它们输出到文本文件中?

For a program that takes a single number from a user, how can you test several values at once and then output them to a text file?

提问人:Henry T 提问时间:1/26/2023 更新时间:1/27/2023 访问量:60

问:

我用 C 语言编写了一个相当简单的程序,它接受输入 n 并计算斐波那契数列中的第 n 个数。当这个程序运行时,你在键盘上输入一个数字,它就会打印出结果。我的问题是,我一次只能手动测试一个输入,以检查错误。如何编写一个程序来同时测试多个输入,并将其输出到可读的文本文件中?

我尝试编写一个程序来运行这些测试,但我不知道如何使程序使用我的函数,该函数编写在单独的文件中。我似乎一次只能测试一个,当我将结果输出到文本文件时,我也无法读取文本文件,它是空的。

C 调试 测试 文件- IO

评论

0赞 pm100 1/26/2023
将逻辑放入函数中并在循环中调用它,将函数的输出写入 stdout 或文件
0赞 Steve Summit 1/26/2023
我会让程序从命令行(即)而不是键盘获取输入。然后,我会编写一个 shell 脚本来多次调用该程序,并提供所需的输入。(当然,我是一个Unix爱好者,所以我总是在写shell脚本。如果您从未使用过命令行,或者无权访问命令行,那么这种方法就不会那么容易了。argv
0赞 Dúthomhas 1/26/2023
for /F %i in (input.txt) do @(echo %i |my_program.exe)其中每行包含一个测试input.txt
0赞 Dúthomhas 1/26/2023
for /F "tokens=1-2" %i in (input.txt) do @(echo %j && echo %i |my_program.exe)其中每行都包含一个测试值和一个正确的结果值input.txt
1赞 user3386109 1/26/2023
向我们展示您拥有的代码。

答:

1赞 Allan Wind 1/26/2023 #1

最简单的解决方案是将代码迁移到函数,然后在循环中调用它:

#include <stdio.h>

long fib(long n) {
   // ...
}

int main() {
    long n = 2;
    for(long i = 0; i < n; i++)
        printf("%ld %ld\n", i, fib(i));
}

为此,您必须将 i/o(提示用户输入)与实现斐波那契算法的函数分开。一般来说,这是一个很好的设计实践。您可以构建两个程序(一个交互式程序,一个非交互式程序),或者一个程序,例如使用命令行参数驱动它:

int main(int argv, char argv[]) {
    if(argc == 2) {
        long n = atol(argv[1]);
        for(long i = 0; i < n; i++)
            printf("%ld %ld\n", i, fib(i));
        return 0;
    }
    printf("n? ");
    long n;
    if(scanf("%ld", &n) != 1) return 1;
    printf("%ld %ld\n", n, fib(n));
}

我建议您打印数据,然后将 stdout 重定向到文件。您必须向我们展示一些代码,以找出为什么您的文本输出文件功能不起作用。