2010-11-22 2 views
0

C 프로그램의 파일에서 다음 비어 있지 않은 공백/개행/탭 문자를 읽는 가장 빠른 (가장 짧은) 방법은 무엇입니까?C 파일의 다음 공백이 아닌 문자를 읽는 가장 좋은 방법

나는 아마도 strtok이 뒤따라 오는 것을 사용할 수 있다는 것을 알았지 만, 좀 더 간결해야 할 것처럼 보인다.

그렇다면 알려주세요. 그렇지 않다면 나도 그 사실을 알려주십시오.

감사합니다.

+1

가'gets'를 사용하지 마십시오 사용하는 것입니다. 배운 책을 태우십시오. :-) –

+0

하하. 나는 그러고 싶지만 인터넷에서 소식을 듣고 나는 그걸 태워 버릴 방법을 몰라. :-) – stonea

+1

실제로, 불타는 것만이 더 강하게 만드는 것처럼 보입니다. – detly

답변

5
char c; 
fscanf(f, " %c", &c); 

또는

int c; 
while (isspace(c=fgetc(f))); 
+0

흥미 롭다면, scanf가 그 안에 공간을 가지고 그런 식으로 행동한다는 것을 깨닫지 못했습니다. 그들이 "공백 문자"섹션에 문서화되어있는 것처럼 보입니다 : http://www.cplusplus.com/reference/clibrary/cstdio/scanf/. 답변 해주셔서 감사합니다. – stonea

+0

해당 사이트는 C 라이브러리에 대한 정보의 좋은 소스가 아닙니다. 예를 들어'scanf'는 읽은 필드의 수를 반환합니다; 이것은 잘못된 것입니다. 'scanf'는 변환되고 저장되는 필드의 수를 반환합니다. 저장을 억제하기 위해'*'한정자를 사용하면 더 적어집니다. 그것은 많은 잘못된 경우를 가져옵니다. 권위있는 문서화를 위해 C 표준 (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf)을 얻는 것이 낫습니다. –

+0

아, 네, 원래 소스에가. 그것은 영리합니다 :-) 고마워요. 단지 당신을 위해 나는 그 웹 사이트의 일부 페이지를 인쇄하고 다음에 불이 났을 때 그들을 태울 것입니다. – stonea

0

다음 문자는 fgetc을 사용하여 읽을 수 있습니다. 공백인지 아닌지 미리 알 수 없으므로 위험을 감수하고 읽어야합니다. 비어 있지 않은 것으로 판명되면 fputc을 사용하여 다시 넣을 수 있습니다.

+0

OP *는 공백 문자가 아닌 첫 번째 공백 문자를 원하므로'ungetc' (매우 틀린'fputc'와는 반대로 말하고자하는) 것이 필요하지 않습니다. –

2

또 다른 가능성은 scanf("%1s", &c);

+0

+1, 현명한 변종. –

관련 문제