如何运行c程序并在同一行中输入

时间:2012-10-21 22:02:29

标签: c

我是C的新手,我想询问有关运行C程序并同时提供输入的信息。

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

./fileOpener < filename1

我已经尝试过它并且工作正常,但是我用什么来知道filename1是什么?这样我就可以用

打开文件
fp = fopen(filename1, "r")

感谢。

编辑:好的,我会尝试解释一下。如果没有“&lt;”然后我可以像以前一样使用命令行参数,但是当我用&lt;来尝试它时,它不起作用

具体来说: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 个答案:

答案 0 :(得分: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"

Source

答案 1 :(得分:2)

如果您使用重定向(即&#34;&lt; filename&#34;),则无法执行此操作,系统会打开该文件。您可以发现该名称,但它不可移植,并且因为该文件已经打开,所以无论如何都是无用的。只需使用stdin代替fp,您无需使用fopen()(也不会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;
}

答案 2 :(得分:1)

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

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

答案 3 :(得分: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;
}