1

您如何要求用户输入文件作为要使用的参数(尽可能多)?另外,您将如何打印到文件?

scanf("%s", user_filename);

    FILE *fp;
    fp = fopen (user_filename, "r");

我试过对它做各种事情,但我只能让它拿一个文件。

4

1 回答 1

3

将某些文件名传递给 C 程序的最简单方法是将它们作为参数传递给 C 程序。

使用以下参数将参数传递给 C 程序main

int main( int argc, char *argv[] )
{
    ...
}

该值argc指示有多少个参数,并且argv[]是包含参数的字符串指针数组。请注意,索引处的第一个参数0(由 指向的字符串argv[0])是命令名称本身。传递给命令的其余参数在argv[1]argv[2]等中。

如果你编译你的程序并像这样调用它:

my_prog foo.txt bar.txt bah.txt

那么 的值argc将是4(记住它包括命令)并且argv值将是:

argv[0] points to "my_prog"
argv[1] points to "foo.txt"
argv[2] points to "bar.txt"
argv[3] points to "bah.txt"

那么在你的程序中,你只需要检查argc有多少参数。如果argc > 1,那么您至少有一个参数从 开始argv[1]

int main( int argc, char *argv[] )
{
    int i;
    FILE *fp;

    // If there are no command line parameters, complain and exit
    //
    if ( argc < 2 )
    {
        fprintf( stderr, "Usage: %s some_file_names\n", argv[0] );
        return 1;  // This exits the program, but you might choose to continue processing
                   // the other files.
    }

    for ( i = 1; i < argc; i++ )
    {
        if ( (fp = fopen(argv[i], "r")) == NULL )
        {
            fprintf( stderr, "%s: Gah! I could not open file named %s!\n", argv[0], argv[i] );
            return 2;
        }

        // Do some stuff with file named argv[i], file pointer fp

        ...
        fclose( fp );
    }

    return 0;
}

这只是几种不同的方法之一(功能上和风格上),具体取决于您需要如何处理文件。

于 2013-09-22T00:34:50.253 回答