scanf 무한루프 고수님들 도와주세요...

이건우의 이미지

#include
#include
int main(){
char c;
char b[100]="";

do{
scanf("%[^\n]s",b); // 대신 scanf("%s",b); 하면 무한루프 안도는데 왜 이러면 무한뤂돌아요?
if(strcmp(b,"exit")==0)
break;
printf("asd");
}while(strcmp(b,"exit")!=0);

}

공백받고 토큰분리하는 과제에 무한루프를 써야하는데 스캔에프 저거 어캐 해결하나요..

익명 사용자의 이미지

"%[^\n]s"가 의도한 format string이 맞나요?

s와 [(set)]은 둘 다 conversion specifier이기 때문에 % 하나에 둘 중 하나만 들어갈 수 있습니다.

이 경우 %[^\n]까지 하나의 conversion specification으로 해석이 되고, 뒤의 s는 따로 남아 다른 역할을 맡게 되지요.

scanf의 format string은 아주 간단한 스크립트 언어라고 불러도 될 정도로 복잡하고, 의외로 초보들은 잘 모르는 기능들이 많습니다. 더 심각한 문제는, 프로그래머가 의도하지 않은 방식으로 작성되어도 경고 하나 없이 조용히 (이상하게) 동작하는 경우가 많다는 거죠.

레퍼런스를 늘 참조하고 조심히 쓰는 게 좋습니다.

https://en.cppreference.com/w/c/io/fscanf