您如何要求用户输入文件作为要使用的参数(尽可能多)?另外,您将如何打印到文件?
scanf("%s", user_filename);
FILE *fp;
fp = fopen (user_filename, "r");
我试过对它做各种事情,但我只能让它拿一个文件。
您如何要求用户输入文件作为要使用的参数(尽可能多)?另外,您将如何打印到文件?
scanf("%s", user_filename);
FILE *fp;
fp = fopen (user_filename, "r");
我试过对它做各种事情,但我只能让它拿一个文件。
将某些文件名传递给 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;
}
这只是几种不同的方法之一(功能上和风格上),具体取决于您需要如何处理文件。