3

我是 C 新手,我想问一下如何运行 C 程序并同时提供输入。

我想做的是运行一个程序(例如fileOpener)并说明要打开哪个文件

./fileOpener < filename1

我已经尝试过了,它工作正常,但是我用什么来知道 filename1 是什么?这样我就可以打开文件

fp = fopen(filename1, "r")

谢谢。

编辑:好的,我会尝试解释更多。如果没有“<”,那么我可以像以前一样使用命令行参数,但是当我用 < 尝试它时,它不起作用

具体来说:fileOpener代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
printf("%s", argv[1]);
}

当我使用./fileOpener < filename1输出是./fileOpener

我用作gcc -o fileOpener fileOpener.c编译器

4

4 回答 4

4
int main(int argc, char *argv[])

您可以随意命名它们,但这些是正常名称。

argc是非负的。它给出了 中有用元素的数量argv

如果 argc 是正数,则argv[0]包含程序名称。然后argv[1]通过argv[argc - 1]指向包含程序命令行参数的字符数组。

例如,如果我在命令行运行一个程序,例如

unzip filename.zip

argc将等于 2;并将argv[0]比较等于"unzip"; 并将argv[1]比较等于"filename.zip"

资源

于 2012-10-21T22:05:50.803 回答
2

你不能这样做,如果你使用重定向(即“<文件名”)文件被系统打开。你可以找到这个名字,但它是不可移植的,而且无论如何都没用,因为文件已经打开了。只需使用stdin而不是fp,您无需使用fopen()(nor fclose()):

int main()
{
   char buffer[1024];

   // fgets() reads at most 1024 characters unless it hits a newline first
   // STDIN has been already opened by the system, and assigned to data flowing
   // in from our file ( < inputFile ).
   fgets(buffer, 1024, stdin);

   printf("The first line of input was: %s", buffer);
}

另一种方法是使用参数:

int main(int argc, char **argv)
{
   FILE *fp = NULL;
   char buffer[1024];

   if (argc != 2)
   {
       fprintf(stderr, "You need to specify one argument, and only one\n");
       fprintf(stderr, "Example: %s filename\n", argv[0]);
       // Except that argv[0], this program's name, counts.
       // So 1 argument in command line means argc = 2.
       return -1;
   }
   printf("I am %s. You wanted to open %s\n", argv[0], argv[1]);

   fp = fopen(argv[1], "r");

   fgets(buffer, 1024, stdin);

   printf("The first line of input was: %s", buffer);

   fclose(fp); fp = NULL; // paranoid check

   return 0;
}
于 2012-10-21T22:10:51.977 回答
1

您需要设置程序以获取命令行参数。这是一个很好的教程,可以解决您的确切问题:

http://www.cprogramming.com/tutorial/c/lesson14.html

于 2012-10-21T22:04:48.130 回答
0

C 中程序的main函数有两个参数:

int main(int nArgs, char *pszArgs[]) {}

第一个参数告诉程序当你运行它时有多少参数被传递给程序。通常,这只是 1,因为它包含程序的名称。

第二个参数是一个字符串表,可以这样访问(下面的程序打印给它的参数):

int main(int nArgs, char *pszArgs[])
{
   int i = 0;
   while (i < nArgs)
   {
      printf("param %d: %s\n", i, pszArgs[i]);
      i++;
   }
   return 0;
}
于 2012-10-21T22:11:05.730 回答