코드를 아무리 부분을 올린다고 해도 그 부분은 제대로 올려주셔야 합니다. 그냥 %*s가 아니라 "%*s"겠죠. 애초에 길지도 않은 코드를 굳이 이렇게 자르고 편집해서 올리시는 이유를 모르겠습니다.
scanf의 서식 문자에서 *은 그 부분에서 입력받은 값을 어디에도 저장하지 않겠다는 의미입니다. 그래서 화이트스페이스로 구분되는 문자열 하나를 입력받기는 하는데, 그걸 어디에도 저장하지 않고 그대로 버리게 됩니다.
그리고 scanf가 반환하는 값은 처리한 서식 문자의 개수를 의미합니다. 단, 파일의 끝 (EOF)가 나타났을 때에는 EOF를 반환하는데, 이 값이 (통상적으로) -1이기 때문에 ~(-가 아니라)를 붙여 비트를 반전시키면 0이 되므로 EOF가 나타났을 때 루프를 탈출한다는 의미가 됩니다.
luckyquit 4년 전
문제는 저만의 방식으로 정답을 받았습니다!
평소에 다른 사람의 코드를 보며 개선할 것이 있나 공부를 합니다. 이 문제또한 예외는 없었죠.
5번 라인 while문 조건에 있는 명령문을 보면 저 결과값이 0이 아니면 카운트가 올라가게 되있더군요. 공백문자는 아스키코드값 32였나? 아무튼 그렇고 널문자가 0이기 때문에 저게 돌아갈까 생각했습니다.
정상실행됩니다............
아마도 scanf는 공백 탭 엔터키로 구분을 하기때문에 이 세가지는 똑같이 처리되나보다라고 추측을 했구요
뭐 여기까진 이해가 됩니다.
근데 저 %s에 대한 scanf는 인자가 없습니다.... %*s가 무엇을 의미하는지 긴가민가합니다. (설마 입력받은 값을 저장할때만 &변수 이고, 굳이 인자를 전달안해도 된다 이런건 아니겠죠? 평소에 저렇게 쓰는 걸 본적이 없어가지고,,,)
scanf %s의 인자는 char* 이니까 거기에 *를 하나 더 붙이면 문자열의 각 글자를 표현하는 거겠죠. 그럼 여기서 입력받은 문자는 어디에 저장되는 거죠? 임시버퍼...?인가요?
scanf("blabla");의 반환값이 있는 건 알지만 아마도 입력받은 글자가 나오진 않을 거 같습니다. 아마도 글자가 입력되면 0, 탭 스페이스바 엔터키가 들어오면 1을 출력해준다고 추측이 됩니다.
그리고 보통 ~보다는 !을 쓰지 않나요? 뭐 0과 1이면 결과에는 지장이 없는 건 맞지만,,
그리고 뭔가 개인적인 생각인데, 저건 숏코딩용이지 안정적인 코드는 아니라고 생각이 드네요,, 근거없이 그냥 촉만 그렇습니다.
여기까지가 제 추측입니다. 제 부족한 이해를 매꿔주실 분 찾습니다.
항상 답변 달아주셔서 감사합니다.