C 언어 에서 scanf () 의 용법!
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 등 빈 칸 을 걸 러 내 는 것 을 뜻 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.