2010-01-18 5 views
4
Windows에서

,scanf()는 실제로 어떻게 작동합니까?

char c; 
int i; 

scanf("%d", &i); 
scanf("%c", &c); 

컴퓨터는 '\ n을'이 버퍼에 남아 있기 때문에 콘솔에서 문자를 검색 할 건너 뜁니다. 그러나 아래 코드가 잘 작동한다는 것을 알았습니다.

char str[10]; 
int i; 

scanf("%d", &i); 
scanf("%s", str); 

위와 마찬가지로 '\ n'은 버퍼에 남아 있지만 scanf가 이번에는 콘솔에서 성공적으로 문자열을 가져 오는 이유는 무엇입니까?

+1

여기에 약간의 정보가 필요합니다. 콘솔에 무엇을 입력하고 있습니까? 무엇을 얻고 싶니? 위의 코드가 의도 한대로 작동하지 않아도되는 이유는 무엇입니까? – Martin

답변

6

(I 윈도우 편리이 없습니다). 최대 필드 너비는 얼마나 많은 문자가 읽히는 지 알려주는 것입니다 ( ). 최대 값을 지정하지 않으면 기본값은 1입니다. 또한 초기 공백 문자를 건너 뛰지 않습니다.

% s : 비 공백 문자의 문자열과 일치합니다. 처음으로 공백을 건너 뛰고 버리지 만, 읽은 후에 공백이 더 많이 발생하면 멈 춥니 다. [이 절은보고있는 동작을 설명해야합니다. ]

1

질문을 이해하는 데 어려움이 있지만 scanf는 모든 공백 문자를 무시합니다. n은 공백 문자입니다. 사용자가 Enter 키를 눌렀을 때를 감지하려면 fgets를 사용해야합니다. 항상 문자의 고정 된 수의 일치 :

퍼센트에 c :

gcc가 매뉴얼 페이지에서
fgets(str, 10, stdin); 
+0

나쁜 eng를 위해 sry :(나는 'retrie'보다는 오히려 'get'을 사용해야한다고 생각한다.) 나는 그 의미를 혼란스럽게했다. – Jaebum