2902번 - KMP는 왜 KMP일까?
첫번째코드는 A-A-A를 입력해보면 '-'가 그대로 나옵니다
근데 두번째코드는 for에서 연산부분에서 %*[-] 를 뺐더니 문제없는데
처음코드의 %*[-] 는 어떤처리가된거죠?
위의 코드에서 %*[-]이 실행되려면 먼저 %*[a-z]에 맞는 문자열(알파벳 소문자로만 이루어진 길이 1 이상의 문자열)이 입력되어야 합니다. *는 입력을 받지만 변수에 저장하지 않는다는 뜻이지, 입력이 올바르게 주어지지 않아도 그냥 넘어간다는 뜻이 아닙니다.
%*[-]
%*[a-z]
*
%*[a-z] 부분에서
알파벳 소문자 길이 1 이상의 문자열이 없으면 그냥 scanf 자체에서 뒤의 내용( %*[-] )을 더이상 처리 안하게되나요?
네. scanf는 format string을 순서대로 처리하다가, 올바르지 않은 입력이 주어지면 처리를 중단합니다.
scanf
예를 들어 아래와 같은 코드에 aaa bbb ccc를 입력할 경우 a까지만 정상적으로 입력받고 b, c는 처리되지 않습니다.
aaa bbb ccc
a
b
c
댓글을 작성하려면 로그인해야 합니다.
leehosu01 6년 전
첫번째코드는 A-A-A를 입력해보면 '-'가 그대로 나옵니다
근데 두번째코드는 for에서 연산부분에서 %*[-] 를 뺐더니 문제없는데
처음코드의 %*[-] 는 어떤처리가된거죠?