본문 바로가기

Memo_ProblemSolving

Scanf가 정상적으로 작동하지 않을 때

KMP 알고리즘을 공부하며 코드를 작성했는데, 이상하게도 하나의 scanf를 제대로 못 받는 경우가 있었다.

 

임의의 String에서 pattern을 찾아주는 코드인데, 입력을 계속 테스트하다보니 공백이 있는 입력을 올바르게 처리하지 못하는 것 같았다.

 

즉, "Thereisamonkey"는 올바르게 처리가 되어 연속적으로 scanf를 사용했을 때, 다음 scanf를 불러오지만, "There is a monkey"의 경우는 다음 scanf를 불러오지 못하였다.

 

scanf("%s", string)처럼 일반적으로 %s로는 공백이 있는 string을 받지 못하므로 입력받는 패턴을 변경해야 한다.

 

이에 관하여 구글에서 찾아보니 %[^\n]으로 \n을 제외한 모든 입력을 순서대로 받을 수 있다고 한다. 

 

이는 %[]에서 [와 ]사이에 있는 문자열이 들어오면 입력을 그만 받는 것을 이용한 것으로, 만약 %[end]와 같은 것도 사용이 가능할 것이다. 

첨부된 사진의 6번째 줄에서 알아낸 정보를 사용하였다.