2013-06-09 4 views
0

main에서 작업 할 때 fseekftell이 있으면 알고 싶습니다.주에서 fseek와 ftell에 해당하는 것

예를 들어, 물어볼 때 파일의 이름을 입력하면 끝에서 Enter 키를 누릅니다. 다음으로 사용자에게 다른 파일 이름을 물어 보지만, 읽지 않은 버퍼에 '\n'이 있습니다. 프로그램에서 '\n'을 읽으므로 사용자는 두 번째 파일의 이름을 입력 할 수 없습니다. 그래서 나는 한 포지션을 버퍼에서 앞으로 움직이고 싶다. 일반적으로 파일에서 내가 할 것입니다 :

fseek(file, ftell + 1, SEEK_SET); 

내가 메인에있을 때와 같은 일을하고 싶습니다. 파일로 작업하지 않습니다.

+0

당신이 콘솔 /'stdin'에서 입력을 읽는 의미합니까? 그렇다면 입력 스트림을 플러시 *해야합니다. 포인터에 대한 [이 게시물] (http://stackoverflow.com/questions/2187474/i-am-not-able-to-flush-stdin)을 참조하십시오 –

+0

* * 파일을 사용하고 있습니다. 작업하고있는 파일은'stdin' 일뿐입니다. 예를 들어,'getc (stdin)'과 getchar()'은 정확히 동일합니다; 'stdin'은 암묵적인 매개 변수로 생각할 수 있습니다. –

+0

* 정확히 어떻게이 파일 이름을 읽고 있습니까? 'fgets()'를 사용하면, ti는'\ n'을 소비합니다. 'scanf ("% s", ...)'를 사용하면, 그 이름을 저장 한 배열이 오버플로되는 것을 피할 수 없습니다. 우리에게 [작은 완성 된 프로그램] (http://sscce.org/)을 보여주고, 우리가 당신을 도울 수 있도록 도울 수 있습니다. 그것이 그대로, 당신은 *'fseek'가 올바른 해결책이라고 가정합니다. 거의 확실하게 [XY 문제] (http://meta.stackexchange.com/q/66377/167210)가 있습니다. –

답변

1

사실, main에서 fseek는 사용할 수 있습니다, 당신은 단지, stdin-FILE * stream을 설정해야합니다 :

fseek(stdin, ftell - 1, SEEK_SET); 
+0

질문과 대답이 의미가 없습니다. 물론 main 함수 안에서 fseek 함수를 호출 할 수 있습니다. 왜 네가 할 수 없을거야? ''main '과 아무 관계가없는''stdin'과 같은 것에''fseek''와''ftell'을 호출하는 것에 대해 묻고 있습니다. 즉, '표준'에 'fseek'라고 부르는 것이 타당하지 않습니다. 또한 참조하십시오 : http://stackoverflow.com/questions/4917801/using-fseek-with-a-file-pointer-that-points-to-stdin – jamesdlin

+0

나는 당신이'fseek'를 사용하기 위해 파일을 지정해야한다는 것을 알았습니다. 그냥 콘솔에서 입력을 읽는'stdin' 파일이 내가 원하는지 몰랐습니다. –

1

이 작업을 수행하는 가장 쉬운 방법은

getc(stdin); 

또는 짧은

getchar(); 

말을하고 반환 된 문자를 무시하는 것입니다. 이 것 때문에