打开文件并以C输出

时间:2009-11-16 00:06:30

标签: c

我正在使用XCode,我正在尝试打开一个作为命令行参数传递的文件,并将作为该文件的命令行参数传递的行数输出到C中的控制台。在XCode中,我的参数是“test.rtf”和“5”。我的rtf看起来像:

line 1 test
line 2 test
line 3 test
line 4 test
line 5 test
line 6 test
line 7 test
line 8 test
line 9 test
line 10 test

我和我的rtf在我的XCode项目文件夹所在的文件夹中以及可执行文件所在的Debug文件夹中尝试过这个。我的代码是:

#include <stdio.h>
#include <stdlib.h>
#define CORRECT_PARAMETERS 2
int main(int argc, char *argv[])
{
 int x;
 if (argc != CORRECT_PARAMETERS) {
  printf("Wrong number of parameters inputted.");
 }
 else {
  FILE *inFp;             /*declare a file pointer */
  if ((inFp = fopen(argv[0], "r") == NULL)) {
   fprintf(stderr, "Can't open file");
   exit(EXIT_FAILURE);
  }
  else {
   for (x = 1; x <= argv[1]; x++) {
    while ((x = fgetc(inFp)) != EOF) {
      printf("%c", x);
    }
   }
  }
  fclose(inFp);
 }

}

我知道我的代码输出在命令行输入的行数可能不正确,但我不能让开头部分只打开文件。输出的是:

Wrong number of parameters inputted.  

谢谢!

1 个答案:

答案 0 :(得分:10)

  

在XCode中,我的参数是“test.rtf”,   和“5”。

那么,argc将取3的值。

  

argv [0]:程序名称

     

argv [1]:“test.rtf”

     

argv [2]:5

您应该更新已定义的常量以取值3.

 if ((inFp = fopen(argv[0], "r") == NULL)) 

argv [0]是正在执行的程序的名称。

您正在寻找的(第一个参数)是argv [1]

int x;
for (x = 1; x <= argv[1]; x++) {

这闻起来很麻烦。您正在将c字符串与整数进行比较。 试试这个(包括使用参数2而不是1,如上所述):

int x;
int limit = atoi(argv[2]);
for (x = 1; x <= limit; x++) 

您在此处更改X的值。

 while ((x = fgetc(inFp)) != EOF)

赋值x = 1只发生一次!!!将inFp读入另一个变量。