본문 바로가기

C/Study

[C] scanf 매개변수(인자)의 형식

반응형

scanf() 함수의 입력 형식 기호 바로가기!!!

1. scanf("%3s", str);

scanf("%3s", str);

이렇게 할 경우 입력 버퍼로부터 3개의 문자열만을 읽어들이고 나머지는 입력 버퍼에 남아있게 된다.

scanf("%3s", str);

scanf("%c", &ch);

이렇게 코딩하고 입력시에 "abcdef" 를 입력해주고 출력을 해보면

%3s에서 3을 빼고 %s로 적었을 경우에는

str에 "abcdef"가 입력이 되고 입력 버퍼에 남아있는 엔터값이 ch로 입력이 되어 버리지만

위의 경우에는 str에는 "abc" 3자리만 str에 입력이 되고 ch에는 입력 버퍼에 남아있던 문자열중 첫번째 'd'가 입력이 된다.

2. scanf("%d", &num);

scanf("%d", &num); 이렇게 코딩하고

입력을 "123ab45" 이렇게 하면 사용자가 입력한 문자열 맨 처음부터해서 문자가 나오기전까지 정수 부분만 입력이 된다.

따라서 위의 경우 num에는 숫자 123으로 초기화가 된다.

3. scanf(" %c", &ch);

scanf(" %c", &ch); 이렇게 %c 앞에 공백을 두면 화이트 스페이스(tab, space bar, enter)가 무시된다.

fflush(stdin); 으로 입력 버퍼를 비우는 방법의 경우 윈도우 기반에서는 정상 동작하지만

Unix/Linux, gcc 기반에서는 fflush가 정상적으로 동작하지 않을수도 있다.

4. scanf("%[12345]", str);

char str[80] = {0};

scanf("%[12345]", str); // 사용자가 입력한 문자열 처음부터 비교해서 []사이에 있는 문자열하고 같은 부분만 입력 됨.

사용자가 입력으로 "4567"을 입력할 경우 str에 "45"만 입력이 됨

"0123" 입력할 경우 아무것도 입력되지 않음

"123945" 입력할 경우 "123"만 입력이 됨

5. scanf("%[0-9]", str);

char str[80] = {0};

scanf("%[0-9]", str);

위 4번과 동일하나 0~9까지임, 즉 범위 지정 가능

6. scanf("%[a-zA-C]", str);

scanf("%[a-zA-C]", str);

이런 식으로도 범위 지정 가능

7. scanf("%[^12345]", str);

char str[80] = {0};

scanf("%[^12345]", str); // 사용자가 입력한 문자열 처음부터 비교해서 []사이에 있는 문자열하고 다른 부분만 입력 됨.

사용자가 입력으로 "4567"을 입력할 경우 str에 아무것도 입력이 안됨

"6745" 입력할 경우 str에 67만 입력이 됨

"4512" 입력할 경우 str에 아무것도 입력이 안됨

8. scanf("%[^0-9]", str);

char str[80] = {0};

scanf("%[^0-9]", str);

위 7번과 동일하나 0~9까지임, 즉 범위 지정 가능

9. scanf("%[^\n]", str);

7번을 응용해서 scanf("%[^\n]", str) 이렇게 하면

개행문자('\n') 전까지 입력을 받겠다는 의미가 되므로 공백도 입력받을 수 있음

"테스트 입력입니다. 1 2 3(enter)" 이렇게 입력하면 str에 "테스트 입력입니다. 1 2 3"이 입력이 됨

10. scanf("%30[^\n]", str);

1번과 9번을 응용해서 scanf("%30[^\n]", str); 이렇게 하면

개행문자 전까지 30자리까지 입력을 받을 수 있음(공백 포함)

반응형

'C > Study' 카테고리의 다른 글

[C] 프로그래밍 방법의 3가지  (0) 2024.12.21
[C] 컴파일러와 인터프리터의 차이점  (0) 2024.12.21
컴파일과 빌드의 차이점  (0) 2024.12.21
[C] 오류와 경고의 차이점  (0) 2024.12.21
[C] 연산자 우선순위 문제  (0) 2024.12.20