2009-11-16 3 views
0

XCode를 사용하고 있는데 명령 줄 인수로 전달 된 파일을 열려고하고 해당 파일의 명령 줄 인수로 전달 된 줄 수를 출력하려고합니다. XCode에서 내 주장은 "test.rtf"와 "5"입니다. 내 Xcode 프로젝트 폴더와 같은 폴더에 내 RTF로 이것을 시도파일 열기 및 C 언어로 출력

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는 것 같습니다.

#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. 

감사합니다.

답변

10

XCode에서 내 인수는 "test.rtf", 및 "5"입니다.

음 후는 argc [0] 3.

ARGV의 값을 취한다 : 이름을 프로그램

는 argv [1] "test.rtf"

을 변수는 argv [2] : 5

당신은 업데이트해야합니다 정의 된 3

,174의 값을 상수
if ((inFp = fopen(argv[0], "r") == NULL)) 

argv [0]은 (는) 실행중인 프로그램의 이름입니다.

은 당신이 (첫 번째 인수)을 찾고있는 것은 변수는 argv [1]

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

이 문제 냄새입니다. C 문자열과 정수를 비교하고 있습니다. (전술 한 바와 같이, 1이 아닌 인자 2를 사용하는 것을 포함)이 시도 : 여기

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

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

할당 X = 1 번만 발생하는 X의 값을 변경하는! ! inFp를 다른 변수로 읽어들입니다.

+0

for 루프는'x'를 테스트하지만 while 루프는 항상 루프의 조건 부분이 테스트되기 전에'x = EOF'를 보장합니다. 따라서 'EOF'의 정의에 따라 for 루프는 한 번 실행되고 종료되거나 무한 루프를 반복합니다. –

+0

좋은 답변, @ 톰. +1 -하지만 argv [1] 대신 argv [2]를 사용하도록 제한 할당을 수정했습니다 (이미 언급했지만이 인스턴스를 발견하지 못했습니다). – paxdiablo