Открытие файла и вывод в C - PullRequest
0 голосов
/ 16 ноября 2009

Я использую 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 Ответ

10 голосов
/ 16 ноября 2009

В 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 в другую переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...