문제
문자열 입출력 함수, gets-puts와 scanf-printf 를 비교 출력하는 코드를 작성하다 문제 상황에 부딪힘.
printf("첫번째 문자열 입력");
scanf("%s", arr);
puts("두번째 문자열 입력");
gets(second);
일반적으로 문자열 입력받는 것과 같이 작성하니 공백에서 입력이 끊기는 것이다.
생각해보니 scanf로 입력받았던 건, 짧은 단어나 공백 없는 문자열이었다.
gets를 사용해 공백 포함 문자열을 입력받을 수도 있겠지만,
scanf를 활용하는 방법은 없을까?
해결
문자열을 받되, 공백도 입력받으려면 %[^\n] 이라고 작성하면 된다.
scanf("%[^\n]", str);
위의 뜻은 개행문자(\n)을 제외한 모든 문자열을 입력받는다는 뜻이다.
이제는 띄어쓰기도 정상적으로 입력받는 것을 볼 수 있다!
어떤 원리에서 이해할 수 있을까?
scanf("%[123]", str);
위의 코드를 작성 후 입력값을 <123456789> 주면, 123에서 더이상 입력받지 않고 끝난다.
%[123] 은 1~3까지의 숫자 입력받는다는 것과 같기 때문이다.
마찬가지로 %[a-z]를 입력하면 소문자만 입력받는다.
이러한 원리를 응용하면 %[^\n], 개행문자를 제외한 문자열을 입력받는다 라고 이해할 수 있다.
문제
문자열 입출력 함수, gets-puts와 scanf-printf 를 비교 출력하는 코드를 작성하다 문제 상황에 부딪힘.
printf("첫번째 문자열 입력");
scanf("%s", arr);
puts("두번째 문자열 입력");
gets(second);
일반적으로 문자열 입력받는 것과 같이 작성하니 공백에서 입력이 끊기는 것이다.
생각해보니 scanf로 입력받았던 건, 짧은 단어나 공백 없는 문자열이었다.
gets를 사용해 공백 포함 문자열을 입력받을 수도 있겠지만,
scanf를 활용하는 방법은 없을까?
해결
문자열을 받되, 공백도 입력받으려면 %[^\n] 이라고 작성하면 된다.
scanf("%[^\n]", str);
위의 뜻은 개행문자(\n)을 제외한 모든 문자열을 입력받는다는 뜻이다.
이제는 띄어쓰기도 정상적으로 입력받는 것을 볼 수 있다!
어떤 원리에서 이해할 수 있을까?
scanf("%[123]", str);
위의 코드를 작성 후 입력값을 <123456789> 주면, 123에서 더이상 입력받지 않고 끝난다.
%[123] 은 1~3까지의 숫자 입력받는다는 것과 같기 때문이다.
마찬가지로 %[a-z]를 입력하면 소문자만 입력받는다.
이러한 원리를 응용하면 %[^\n], 개행문자를 제외한 문자열을 입력받는다 라고 이해할 수 있다.