C 언어 에서 scanf () 의 용법!

좋 은 문장http://blog.tianya.cn/blogger/post_show.asp?BlogID=287129&PostID=3668453
scanf 상세 설명
scanf 원형: 
  
  # include 
  int scanf( const char *format, ... ); 
  
함수 scanf () 는 표준 입력 스 트림 stdin 에서 내용 을 읽 는 유 니 버 설 서브루틴 으로 모든 고유 유형의 데 이 터 를 읽 고 자동 으로 기내 형식 으로 변환 할 수 있 습 니 다.scanf () 는 printf () 의 보충 함수 입 니 다. 
  
C99 에서 format 는 restrict 로 수식 합 니 다. 
  
format 가 가리 키 는 제어 문자열 은 다음 과 같은 세 가지 문자 로 구성 되 어 있 습 니 다. 
● 형식 설명자 
● 공백 문자 
● 비 공백 문자 
형식 설명자 접 두 사 를 100% (%) 로 입력 하고 scanf () 에 게 다음 에 어떤 데이터 형식 을 읽 을 지 알려 줍 니 다.이 형식 설명자 의 목록 은 다음 표 와 같다. 
   ┏━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ 
┃ 코드 ☆ 의미 ┃ 
   ┠────┼────────────────────────────┨ 
┃% a ☆ 부동 소수점 읽 기 (C99 에 만 적용) ┃ 
┃% A ☆ 부동 소수점 읽 기 (C99 에 만 적용) ┃ 
┃% c ☆ 단일 문자 읽 기 ┃ 
┃% d ☆ 십 진법 정수 읽 기 ┃ 
『 9475 』% i ☆ 10 진법, 8 진법, 16 진법 정수 읽 기 『 9475 』 
┃% e ☆ 부동 소수점 읽 기 ┃ 
┃% E ☆ 부동 소수점 읽 기 ┃ 
┃% f ☆ 부동 소수점 읽 기 ┃ 
┃% F ☆ 부동 소수점 읽 기 (C99 에 만 적용) ┃ 
┃% g ☆ 부동 소수점 읽 기 ┃ 
┃% G ☆ 부동 소수점 읽 기 ┃ 
┃% o ☆ 8 진수 읽 기 ┃ 
┃% s ☆ 문자열 읽 기 ┃ 
┃% x ☆ 16 진수 읽 기 ┃ 
┃% X ☆ 16 진수 읽 기 ┃ 
┃% p ☆ 읽 기 지침 치 ┃ 
┃% n ☆ 이미 읽 은 값 의 등가 문자 수 ┃ 
┃% u ☆ 기호 없 는 십 진법 정수 읽 기 ┃ 
┃% [] ☆ 스 캔 문자 집합 ┃ 
┃%% ☆% 기호 읽 기 (백분) ┃ 
   ┗━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 
예 를 들 어% s 는 읽 기 문자열 을 표시 하고% d 는 읽 기 정 수 를 표시 합 니 다.형식 문자열 의 처리 순 서 는 왼쪽 에서 오른쪽으로, 형식 설명 자 는 각각 변 원 표 의 변 원 과 일치 합 니 다.긴 정 수 를 읽 기 위해 서 는 l (ell) 을 형식 설명자 앞 에 놓 을 수 있 습 니 다.짧 은 정 수 를 읽 기 위해 서 는 h 를 형식 설명자 앞 에 놓 을 수 있 습 니 다.이 장식 부 호 는 d, i, o, u 와 x 형식 코드 와 함께 사용 할 수 있다. 
  
기본 적 인 상황 에서 a, f, e 와 g 는 scanf () 에 float 로 데 이 터 를 분배 하 라 고 알려 줍 니 다.l (ell) 을 이 수정자 앞 에 놓 으 면 scanf () 는 double 로 데 이 터 를 분배 합 니 다.L 을 사용 하면 scanf () 에 게 데 이 터 를 받 는 변 수 는 long double 형 변 수 를 알려 줍 니 다. 
  
사용 하 는 현대 컴 파일 러 프로그램 이 1995 년 에 추 가 된 와 이 드 문자 특성 을 지원 한다 면 c 형식 코드 와 함께 l 수정자 로 유형 wchar 을 설명 할 수 있 습 니 다.t 의 넓 은 문자 포인터;s 형식 코드 와 함께 넓 은 문자열 의 지침 을 l 수정자 로 설명 할 수도 있 습 니 다.l 수식 부호 도 스캐닝 집합 을 수식 하여 넓 은 문 자 를 설명 할 수 있다. 
  
문자열 의 공백 문 자 를 제어 하여 scanf () 가 입력 흐름 에서 하나 이상 의 공백 줄 을 건 너 뛰 게 합 니 다.공백 부 호 는 빈 칸 (space), 탭 문자 (tab), 새 줄 문자 (newline) 일 수 있 습 니 다.본질 적 으로 문자열 의 공백 부 호 를 제어 하여 scanf () 를 입력 흐름 에서 읽 지만 결 과 를 저장 하지 않 습 니 다. 공백 문자 가 아 닌 것 을 발견 할 때 까지. 
  
공백 문자 가 아 닌 scanf () 는 흐름 에서 일치 하 는 문 자 를 읽 고 무시 합 니 다.예 를 들 어 '% d,% d' 는 scanf () 로 하여 금 먼저 정 수 를 읽 게 하고 읽 기 에서 쉼표 를 포기 한 다음 다른 정 수 를 읽 게 합 니 다.일치 하 는 것 을 발견 하지 못 하면 scanf () 를 되 돌려 줍 니 다. 
  
scanf () 에서 읽 기 값 을 저장 하 는 변 원 은 모두 변수 포인터, 즉 해당 변수의 주소 여야 합 니 다. 
  
입력 흐름 에서 데이터 항목 은 빈 칸, 탭 문자, 새 줄 문자 로 분할 되 어야 합 니 다.쉼표 와 분점 등 은 구분자 가 아 닙 니 다. 예 를 들 어 다음 코드 와 같 습 니 다. 
   scanf( "%d %d", &r, &c ); 
10, 20 입력 을 받 아들 이지 만 10, 20 을 만나면 실패 합 니 다. 
  
백분율 (%) 과 형식 문자 사이 의 별표 (*) 는 지정 한 형식의 데 이 터 를 읽 지만 저장 하지 않 음 을 표시 합 니 다.그래서 
   scanf( "%d %*c %d", &x, &y ); 
10 / 20 의 읽 기 동작 에 10 을 변수 x 에 넣 고 20 을 y 에 넣 습 니 다. 
  
형식 명령 은 최대 도 메 인 폭 을 설명 할 수 있 습 니 다.백분 번호 (%) 와 형식 코드 사이 의 정 수 는 대응 도 메 인 에서 읽 는 최대 문자 수 를 제한 하 는 데 사 용 됩 니 다.예 를 들 어 address 에 20 글자 이상 읽 기 를 원 할 때 다음 과 같이 쓸 수 있 습 니 다. 
  
입력 스 트림 의 내용 이 20 글자 이상 이면 다음 scanf () 는 이번 정지 부분 부터 읽 습 니 다.최대 도 메 인 너비 에 도달 하기 전에 공백 문자 가 있 으 면 이 도 메 인 에 대한 읽 기 를 즉시 중단 합 니 다.이 때 scanf () 는 다음 필드 로 넘 어 갑 니 다. 
  
빈 칸, 탭 문자, 새 줄 문 자 는 도 메 인 분할 기 호 를 사용 하지만 읽 기 단일 문자 작업 에 서 는 일반 문자 로 처리 합 니 다.예 를 들 어 입력 흐름 "x y" 호출: 
   scanf( "%c%c%c", &a, &b, &c ); 
돌아 온 후에 x 는 변수 a 에서 빈 칸 은 변수 b 에 있 고 y 는 변수 c 에 있 습 니 다. 
  
문자열 의 다른 문 자 를 제어 합 니 다. 빈 칸, 탭 문자, 새 줄 문 자 를 포함 하여 입력 흐름 에서 일치 하고 문 자 를 포기 하 는 데 사 용 됩 니 다. 일치 하 는 문 자 는 모두 포기 합 니 다.예 를 들 어 주어진 입력 흐름 "10t 20", 호출: 
   scanf( "%dt%d", &x, &y ); 
t 는 제어 문자열 에 있 기 때문에 10 과 20 을 각각 x 와 y 에 넣 고 t 는 포기 합 니 다. 
  
ANSI C 표준 은 scanf () 에 스 캔 집합 (scanset) 이 라 고 새로운 기능 을 추가 했다.스 캔 집합 은 문자 집합 을 정의 합 니 다. scanf () 에서 허용 하 는 문 자 를 읽 고 해당 하 는 문자 배열 에 부여 할 수 있 습 니 다.스 캔 집합 은 상대방 의 괄호 에 있 는 문자열 로 정의 되 며, 왼쪽 괄호 앞 에 백분율 로 붙 여야 합 니 다.예 를 들 어 다음 스 캔 집합 은 scanf () 로 하여 금 문자 A, B, C 를 읽 게 합 니 다. 
   %[ABC] 
  
스 캔 집합 을 사용 할 때 scanf () 는 집합 에 있 는 문 자 를 연속 으로 먹고 해당 하 는 문자 배열 을 넣 습 니 다. 집합 에 없 는 문 자 를 발견 할 때 까지 (즉, 스 캔 집합 은 일치 하 는 문자 만 읽 습 니 다).되 돌 아 왔 을 때 배열 에는 null 로 끝 나 는 읽 기 문자 로 구 성 된 문자열 이 놓 여 있 습 니 다. 
  
문자 로 ^ 보충 집합 을 설명 할 수 있 습 니 다.^ 문 자 를 스 캔 집합 의 첫 번 째 문자 로 넣 을 때 다른 문자 로 구 성 된 명령 의 추가 집합 을 구성 하고 scanf () 는 설명 되 지 않 은 다른 문자 만 받 아들 이 라 고 지시 합 니 다. 
많은 실현 에 있어 서 하이픈 으로 범 위 를 설명 할 수 있다.예 를 들 어 다음 스 캔 집합 은 scanf () 로 하여 금 알파벳 A 부터 Z 까지 받 아들 이게 합 니 다. 
   %[A-Z] 
중요 한 것 은 스 캔 집합 이 대소 문 자 를 구분 하 는 것 임 을 주의해 야 한다.따라서 크 고 소문 자 를 스 캔 하려 면 크 고 소문 자 를 각각 설명해 야 한다. 
scanf () 는 성공 적 으로 할당 한 도 메 인 수의 값 을 되 돌려 주지 만 별표 수정자 로 인해 할당 되 지 않 은 도 메 인 을 읽 고 계산 하지 않 습 니 다.첫 번 째 도 메 인 에 할당 하기 전에 오류 가 발생 했 을 때 EOF 로 돌아 갑 니 다. 
  
C99 는 scanf () 에 hh, ll, j, z 와 t 를 추가 했다.hh 수식 부 호 는 d, i, o, u, x, X 또는 n 에 사용 할 수 있다.이 는 해당 변 원 이 signed 또는 unsigned char 값 이거 나 n 에 사 용 될 때 해당 변 원 은 long char 형 변 수 를 가리 키 는 지침 임 을 나타 낸다.ll 장식 부 호 는 d, i, o, u, x, X 또는 n 에 도 사용 할 수 있다.그것 은 상응하는 변 원 이 signed 나 unsigned long int 값 이라는 것 을 설명 한다. 
j 형식 장식 부 호 는 d, i, o, u, x, X 또는 n 에 적용 되 며, 일치 하 는 변 원 은 유형 intmax 임 을 설명 합 니 다.t 또는 uintmaxt。이 유형 들 은 최대 너비 의 정 수 를 설명 합 니 다. 
z 형식 장식 부 호 는 d, i, o, u, x, X 또는 n 에 적용 되 며, 일치 하 는 변 원 은 size 를 가리 키 는 것 임 을 설명 합 니 다.t 타 입 대상 의 지침.이 유형 은 sizeof 의 구 조 를 설명 합 니 다. 
t 형식 장식 부 호 는 d, i, o, u, x, X 또는 n 에 적용 되 며, 일치 하 는 변 원 은 ptrdiff 를 가리 키 는 것 임 을 설명 합 니 다.t 타 입 대상 의 지침.이 유형 은 두 지침 사이 의 차 이 를 설명 합 니 다. 
  
  
예: 
  
  
# include 
  
  int main( void ) 
  { 
   char str[80], str2[80]; 
   int i; 
  
   /* read a string and a integer */ 
   scanf( "%s%d", str, &i ); 
  
   /* read up to 79 chars into str */ 
   scanf( "%79s", str ); 
  
   /* skip the integer between the two strings */ 
   scanf( "%s%*d%s", str, str2 ); 
  
   return 0; 
  } 
  
  *********************************************************************************

  
  
scanf(" This is %d",&c); 
/ * 이 문 구 는 scanf 가 "This is" 를 인쇄 할 것 이 라 고 생각 합 니까?아 닙 니 다. This is 는 여기 서 제어 문자 만 작 동 합 니 다.즉, 이 진정한 뜻 은 "This is" 를 입력 한 후에 변수 C 를 입력 하 라 는 것 이다. 즉, This is 는 입력 하 라 는 것 이 고 scanf 는 "This is" 를 무시 할 것 이다.
scanf ("% d% d", & a, & b) 다시 보기;두 개의 빈 칸 을% 앞 에 두 었 습 니 다. 빈 칸 도 scnaf 의 제어 문자 입 니 다. 빈 칸, 리 턴, TAB, Newline 등 빈 칸 을 걸 러 내 는 것 을 뜻 합 니 다.

좋은 웹페이지 즐겨찾기