leehosu01   6년 전

첫번째코드는 A-A-A를 입력해보면 '-'가 그대로 나옵니다

근데 두번째코드는 for에서 연산부분에서 %*[-] 를 뺐더니 문제없는데 

처음코드의 %*[-] 는 어떤처리가된거죠?

doju   6년 전

위의 코드에서 %*[-]이 실행되려면 먼저 %*[a-z]에 맞는 문자열(알파벳 소문자로만 이루어진 길이 1 이상의 문자열)이 입력되어야 합니다. *는 입력을 받지만 변수에 저장하지 않는다는 뜻이지, 입력이 올바르게 주어지지 않아도 그냥 넘어간다는 뜻이 아닙니다.

leehosu01   6년 전

그러면 %*[a-z] 부분에서 
알파벳 소문자 길이 1 이상의 문자열이 없으면 그냥 scanf 자체에서 뒤의 내용( %*[-] )을 더이상 처리 안하게되나요?

doju   6년 전

네. scanf는 format string을 순서대로 처리하다가, 올바르지 않은 입력이 주어지면 처리를 중단합니다.

예를 들어 아래와 같은 코드에 aaa bbb ccc를 입력할 경우 a까지만 정상적으로 입력받고 b, c는 처리되지 않습니다.

leehosu01   6년 전

이덕분에 해결됬습니다  감사합니다.

댓글을 작성하려면 로그인해야 합니다.