[C언어] scanf 문자열 띄어쓰기 문제

2021. 7. 1. 08:23C

SMALL

1. 띄어쓰기

scanf 사용 시, %s를 이용해서 문자열을 입력받을 때

공백 문자열 전까지만 입력받기 때문에 띄어쓰기를 하면 그 뒷문장은 입력받지 않습니다.

이 문제를 해결하기 위해 %[^] 를 사용합니다.

[^]안의 문자가 나올 경우에만 입력받는 것을 그만두게 됩니다. (예 : %[^\n])

 

2. 일반적으로 %s 연속 사용시

띄어쓰기를 사용하게 되면 b값을 입력할 기회를 주지 않고 넘어가 버립니다.

 

다음 코드에서는 a값은 띄어쓰기 이후 값도 입력을 받지만, b는 받지 않습니다.

 

그래서 두번째 scanf도 동일하게 %[^\n]을 하였으나 b는 입력받지 못합니다.

 

두번째 scanf의 %[^\n]의 앞에 한 칸 띄어쓰기를 해주면 정상적으로 입력됩니다.

 

 

 

번외) 두번째 scanf에만 %[^\n]을 사용하게 되면 띄어쓰지 않아도 b에 이상한 값들이 입력되게 됩니다.

 

 

여기서도 두번째 scanf의 %[^\n]앞에 한 칸 띄어쓰게 되면

정상적으로 입력이 됩니다.

 

 

2번쨰 결론으로... 첫 번째 scanf를 입력하고 엔터를 누르게 되면 해당 줄바꿈(\n)을 인지하고 두번째 scanf의 입력받기를 중단합니다. 앞에 공백을 추가해주면 white space를 두 입력을 구분하는 구분자로 인식해서 그냥 넘어가지 않습니다.

LIST