2010-06-10 4 views
0

약간 문제가 있습니다. 하나의 작은 프로그램에서 많은 파일에 대해 약간의 작업을 수행해야합니다. 지금까지 나는 이름 뒤에 번호를 변경하는 단일 루프에서 이들을 조작하기로 결정했습니다. 파일의 이름은 모두 TFxx.txt이며 여기서 xx는 1에서 80까지 숫자가 증가합니다. 어떻게 하나씩 차례로 열 수 있습니까? 나는 이것을 시도 :C에서 파일 이름 다음에 증가하는 숫자를 만드는 방법은 무엇입니까?

for(i=1; i<=80; i++) { 
    char name[8] = "TF"+i+".txt"; 
    FILE = open(name, r); 
    /* Do something */ 
    } 

당신은 두 번째 줄은 파이썬에서 일하게 될 것입니다하지만, C. 내가이 프로그램에 C와 번호 비슷한 실행하려고 노력하지,하지만 발견되지 않은 볼 수 있듯이 그러나 그것을하는 방법. 형식은 두 번째 줄에있을 필요는 없지만이 문제를 어떻게 해결할 수 있는지 조언하고 싶습니다. 필자가해야 할 일은 단지 많은 파일을 열어서 동일한 작업을 수행 할 수 있어야한다는 것입니다. 다음과 같이

+0

필자가 작성한 코드는 파이썬과 C가 잘 어울리기 때문에 작동하지 않을 것입니다. 어쨌든 여러분 모두는 아이디어를 얻을 수 있습니다 :) – zaplec

+0

0에서 80, 1에서 80까지 반복됩니다. 설명했다. –

+0

편집하고 수정했습니다. – zaplec

답변

5

당신의 sprintf를 사용할 수 있습니다

for(i=0; i<=80; i++) { 
    char name[32]; 
    memset(name, 0, sizeof(name)); 
    FILE *fp; 
    sprintf(name, "TF%d.txt", i); 
    fp = fopen(name, "r"); 
    /* Do something */ 
    } 
+0

감사합니다. 솔루션은 내가 처음 생각한 것보다 훨씬 쉬워 보입니다. 어쩌면 내가 너무 복잡한 방식으로 이것을 생각하고 있었다 :) – zaplec

+1

이름 [] 버퍼가 하나 겹치기 때문에 코드가 올바르지 않다. (\ 0 터미네이터 sprintf가 추가하기에 충분한 공간이 없다). snprintf() 함수를 사용하는 것이 좋습니다. sprintf가 괜찮 으면 (더 큰 이름 버퍼로) 물론 그렇습니다. – Unknown

+0

물론 snprintf를 사용 하겠지만 처음에는 sprintf를 사용하는 것이 좋습니다. –

0

을 어쩌면 내가 잘못하지만, 그냥 "R"대신 R 대신 개방의 fopen의 사용 및 쓰기?

다니엘스의 대답에 추가
FILE = fopen(name, "r"); 
+0

open을 사용할 수도 있지만 두 번째 매개 변수는 O_RDONLY와 같아야합니다. :) 나는 내 대답을 편집 할 것이다. –

+0

예, ANSI-C가 아닙니다. ;) – TheMorph

1

나는 char name[8]가 종료 '\0' i.g.이었다를 개최 조금 더해야한다는 추가하고 싶습니다 char name[20];

FILE = open(name,r);FILE * fp = fopen(name,"r");

+0

당신이 맞습니다 :) –

+0

@daniel fclose (fp)도 호출해야합니다 ;-) – stacker

1

우리가 당신을 가정하자 있어야한다는 의사입니다; 그렇지 않으면 문제뿐만 아니라

당신이 문자열을 연결하고 이것이 + 그냥 합 C, 절대적으로하지, 어떤 언어로 합리적이다 (... 문자열로 정수를 변환 합을 사용
char name[8] = "TF"+i+".txt";

입니다 당신의 이름을 채울 것

char name[BUFLEN]; 
sprintf(name, "TF%d.txt", i); 

...) 숫자 사이에 ...뿐만 아니라 FILE = open...이 문제가) ( snprintf(name, BUFLEN, "TF%d.txt") 더 좋을 수 있지만, 다른 하나는 너무 C89 동안은, C99입니다.

파일은 FILE *fh = fopen(name, "r")과 같은 것을 사용하여 읽을 수 있습니다.

+0

그래, 그것은 다소 유사 코드입니다. 그 문자열의 합계는 파이썬에서와 똑같이 작동하지만, C에서 명확히 말한 것처럼 나는 파이썬에서 C로 이동하고 있으며 모든 경우에 매우 단순하지는 않습니다 :) – zaplec

+0

나는 생각합니다. C에서 먼저 파이썬과 같은 "유연한"동적 언어를 사용하는 것이 더 쉽습니다.) ... C에서는 객체, 가비지 수집, 해시 및 동적 배열, 목록 이해, ... 등을 잊어 버릴 수 있습니다. . 물론 모든 것을 할 수 있으며, 표준 라이브러리가 아닌 ext를 사용하는 것도 있습니다 ...하지만 완전히 다른 경험입니다. – ShinTakezou

0

char name[32]은 for 루프 밖에 있어야합니까?

+0

그래. 한 번만 수행해야하는 모든 정의는 루프 외부에 있어야합니다. – zaplec

관련 문제