Scanf는 UTF8로 인코딩 된 입력 스트림 또는 문자열을 스캔하고 형식 문자열에 따라 출력 데이터를 만듭니다. 그것은 동일한 이름으로 c- 기능의 동작을 모방합니다.
줄리아> 스캔을 사용합니다 Julia> r, a, b = @scanf ( "13은 소수입니다", "%d%[a-za-z]", int, string) (2, 13, "이것은 소수입니다")# 행복한 tuplejulia> r, t ... = @scanf "1 2 -inf 4 u4119" "%d%u%e%x%s"로 데이터를 수집합니다. 0 uint 0.0 int ""(5, 1, 0x000000000000000002, -inf, 4, "䄙")# 스캔 날짜 시간 문자열 -s와 ms 부품 참고 기본값 valuesjulia> f = scanf.format "%d.%를 사용하십시오. 2d.%2d%*1 [t]%2d :%2d :%2d.%3d "; Julia> r, y, m, d, h, m, s, ms = scanf ( "2021.07.04t15 : 53", f, int, Zeros (int8, 5) ..., int16) (5, 2021, 7, 4, 15, 53, 0, 0)
Scanf
매크로 r, a,... = @scanf([io, ] "format_string", args...)
및 함수 r, a,... = scanf(io, f::Scanf.Format, args...)
.
형식 문자열은 문자열 리터럴이어야하며 매크로 확장 시간에 한 번 평가됩니다.
또는 f = Scanf.format"format_string"
또는 f = Scanf.Format(::AbstractString)
함수 호출에 사용할 수있는 형식 개체를 만듭니다.
인수는 유형의 기본값 값입니다. Real
, AbstractChar
, AbstractString
, Ptr
, AbstractVector{Char}
.
그것들은 또한 Real
, AbstractChar
, AbstractString
, Ptr
의 콘크리트 하위 유형 일 수도 있습니다.
숫자 형식 지정자는 숫자 인수 및 String
과 호환됩니다. 변환 오류가 발생할 수 있습니다 (float => int).
숫자 ARG 유형이 값에 대해 충분히 넓지 않으면 올바른 부호를 가진 경계 값이 저장됩니다 (예 : Inf
, -0.0
).
형식 지정자 c
, s
, [
모두 인수 Char
, Char[]
및 String
과 호환됩니다. Char
의 경우 문자열의 첫 번째 문자가 취합니다.
모든 출력 데이터는 할당 된 값의 수를 첫 번째 요소로 포함하여 튜플로 반환됩니다. 값을 구문 분석 할 수없는 경우 기본값이 할당됩니다. arg
의 해당 요소에 값이없는 경우, 기본값은 파생 된 양식 T
입니다.
기본 인수가 Vector
객체 인 경우 출력 값이 추가로 저장됩니다.
형식 문자열은 일부 적응과 함께 C ++ -Scanf C ++ 참조의 정의를 따릅니다.
모든 유니 코드 문자는 형식 문자열 및 입력 데이터로 지원됩니다.
형식 문자열에서, 공백 지정자는 " nrtfv"
의 ASCII 공간 문자 일뿐입니다.
입력 데이터에서 isspace(x) == true
있는 모든 문자 x
형식 문자열의 공백 지정자에 의해 건너 뜁니다.
%n$...
형식 사양의 형태는 지원되지 않습니다.
h
, l
, L
등과 같은 선택 유형 수정자는 무시됩니다. 대상 유형은 대신 해당 기본 인수에서 파생됩니다.
유형 지정자 %c
의 경우 width
지정되지 않은 경우 해당 인수의 Char
또는 String
있어야합니다.
너비 필드 N
이있는 유형 지정자 %Nc
의 경우 인수의 유형 String
또는 Vector{Char}
가 있어야합니다. 이 벡터는 재사용 및 실제로 읽은 문자 수로 크기를 조정합니다.
유형 지정자 %n
은 입력 데이터의 문자 오프셋 인 정수 값을 반환합니다.
유형 지정자 %p
Ptr
기본 인수가 필요합니다.
두 통화의 반환 값은 출력 인수의 양과 모든 출력 데이터가 이어지고 후행 데이터는 기본값 일 수 있습니다. C 및 C ++와 달리, %n
에 대한 인수도 계산됩니다.
문자를 읽기 전에 입력 스트림이 소진되면, 지정된 값 수의 대신 EOF -Indicator -1
이 반환됩니다.
형식 지정자 "whitespace"의 경우 isspace(x) == true
있는 여러 문자 (또한 0) x
입력 스트림에서 소비됩니다.
형식 지정자 문자 문자의 경우 다음 문자를 읽고 문자 문자와 비교합니다. 그것이 동일하면, 소비되면, 그렇지 않으면 프로세스가 실패합니다.
형식 지정자 "문자" %c
처리되는 경우 적어도 하나의 문자가 읽고 출력 인수에 할당됩니다. 문자가 없으면 프로세스가 실패합니다.
형식 지정자 %n
처리되면 데이터가 소비되지 않았으며 EOF가 반환되지 않지만 현재 읽기 위치는 반환됩니다.
C ++ 참조에서 파생 된대로
scanf
함수는 허용 가능한 입력 시퀀스를 지정하는 문자열 format
의 제어 하에서 io
가 가리키는 스트림에서 입력을 읽습니다. 인수 수는 형식에 필요한 형식 지정자 수와 일치해야합니다.
형식은 0 개 이상의 지시문으로 구성됩니다 : 하나 이상의 (ASCII) 흰색 공간 문자, 일반 (UTF8) 문자 ( '%'
또는 A (ASCII) 흰색 공간 문자) 또는 변환 사양. 각 변환 사양은 문자 '%'
에 의해 소개됩니다. '%'
후 다음은 순서대로 나타납니다.
선택적 할당 억제 문자 '*'
.
최대 필드 너비 (문자)를 지정하는 옵션 십진 정수.
이 구현에서 사용하지 않는 선택적 길이 수정 자.
적용 할 변환 유형을 지정하는 변환 지정자 문자.
scanf
함수는 형식의 각 지시문을 차례로 실행합니다. 모든 지시문이 실행되었거나 지시문이 실패한 경우 (아래에 자세히 설명 된대로) 함수는 반환됩니다. 실패는 입력 실패 (인코딩 오류 발생 또는 입력 문자의 이용 불가능) 또는 일치 실패 (부적절한 입력으로 인해)로 설명됩니다.
흰색 공간 문자로 구성된 지침은 최초의 백인이 아닌 공간 문자 (읽지 않은)까지 입력을 읽거나 더 이상 문자를 읽을 수 없을 때까지 입력을 읽습니다. 지침은 결코 실패하지 않습니다.
평범한 캐릭터 인 지침은 스트림의 다음 문자를 읽음으로써 실행됩니다. 해당 캐릭터가 지침과 다르면 지침이 실패하고 다른 문자와 후속 문자는 읽지 않습니다. 마찬가지로, 파일 종료, 인코딩 오류 또는 읽기 오류로 인해 문자가 읽히는 것을 방지하면 지침이 실패합니다.
변환 사양 인 지침은 각 지정자에 대해 아래에 설명 된대로 일련의 일치 입력 시퀀스 세트를 정의합니다. 변환 사양은 다음 단계에서 실행됩니다.
사양에 '['
, 'c'
또는 'n'
지정자가 포함되지 않는 한 입력 흰색 공간 문자 ( isspace
함수에 의해 지정됨)는 건너 뜁니다. 이 흰색 공간 문자는 지정된 필드 너비에 계산되지 않습니다.
사양에 'n'
지정자가 포함되지 않는 한 입력 항목은 스트림에서 읽습니다. 입력 항목은 지정된 필드 너비를 초과하지 않고 일치하는 입력 순서의 접두사 인 가장 긴 입력 문자 시퀀스로 정의됩니다.
입력 항목이 읽은 후 첫 번째 문자 인 경우. 입력 항목의 길이가 0 인 경우 지침 실행이 실패합니다. 이 조건은 파일 종료, 인코딩 오류 또는 읽기 오류가 스트림에서 입력을 방지하지 않는 한 일치하는 실패입니다.이 경우 입력 고장입니다.
'%'
지정자의 경우를 제외하고 입력 항목 (또는 '%n'
지시의 경우 입력 문자의 카운트)은 변환 지정자와 해당 인수에 적합한 유형으로 변환됩니다. 입력 항목이 일치하는 순서가 아닌 경우 지침의 실행이 실패합니다.이 조건은 일치하는 실패입니다. 할당 억제가 A *
로 표시되지 않는 한, 전환의 결과는 OUPUT 튜플로 밀려납니다.
출력 유형에서 변환 결과를 표시 할 수없는 경우 변환 오류가 발생합니다.
선택적 길이 수정 자 l
, ll
, h
, hh
, L
, j
, z
, t
모든 유형 지정자 문자 이전에 허용되지만 그렇지 않으면 무시됩니다.
변환 지정자와 그 의미는 다음과 같습니다.
d
선택적으로 서명 된 10 진수 정수와 일치하며, 그 형식은 parse(T, _, base=10)
함수의 주제 순서에 대해 예상되는 것과 동일하며 여기서 T
는 인수의 정수 유형입니다.
선택적으로 서명 된 정수와 일치 i
, 그 형식은 parse(T, _, base=nothing)
함수의 주제 순서에 대해 예상과 동일합니다.
o
선택적으로 서명 된 옥탈 정수와 일치하며, 그 형식은 parse(T, _, base=8)
함수의 대상 시퀀스에 대해 예상과 동일합니다.
u
선택적으로 서명 된 소수 정수와 일치하며, 그 형식은 parse(T, _, base=10)
함수의 대상 시퀀스에 대해 예상과 동일합니다.
x
선택적으로 서명 된 16 진수 정수와 일치하며, 그 형식은 Thew parse(T, _, base=16)
함수의 대상 시퀀스에 대해 예상과 동일합니다.
a
, e
, f
, g
선택적으로 서명 된 부동 소수점 번호, infinity
또는 NaN
과 일치하며, 그 형식은 예상과 동일합니다.
parse(T, _)
함수의 주제 순서, 여기서 T
부동 소수점 유형이다.
c
필드 너비로 지정된 숫자의 일련의 문자와 일치합니다 (1 지침에 필드 너비가없는 경우 1
). 필드 너비가 1
보다 크고 Char
유형이 주어지면 인수 유형은 String
, Char
또는 Vector{Char}
이어야합니다. 첫 번째 문자 만 저장됩니다.
s
백인이 아닌 공간 문자의 (비어 없음) 시퀀스와 일치합니다. 인수 유형은 c
.
[
예상 문자 세트 (스캔 셋)의 비어 비어 비어있는 문자 순서와 일치합니다. 인수 유형은 c
. 변환 지정자에는 형식 문자열의 모든 후속 문자, 일치하는 오른쪽 브래킷 ( ]
)을 포함합니다. 왼쪽 괄호 후 문자가 Circumflex ( ^
)가 아닌 한 브래킷 (스캔리스트) 사이의 문자는 스캔을 구성합니다. 변환 지정자가 []
또는 [^]
로 시작하면 오른쪽 브래킷 문자는 스캔리스트에 있고 다음 오른쪽 브래킷 문자는 사양을 끝내는 오른쪽 브래킷입니다. 그렇지 않으면 첫 번째 오른쪽 괄호 문자는 사양을 종료하는 것입니다. -
캐릭터가 스캔리스트에 있고 첫 번째 캐릭터가 아닌 첫 번째 문자가 A ^
또는 마지막 문자 인 경우 -
왼쪽의 문자와 -
오른쪽의 범위를 정의합니다. 범위를 정의하는 순서는 문자의 정수 범위입니다. 빈 범위 ( ba
와 같은)는 무시됩니다.
p
일련의 시퀀스 세트와 일치하며, 이는 printf
기능의 %p
변환에 의해 생성 될 수있는 일련의 시퀀스 세트와 동일합니다. 해당 인수는 Ptr{T}
이어야합니다. 여기서 t는 모든 유형 일 수 있습니다. 입력 항목은 구현 정의 된 방식으로 포인터 값으로 변환됩니다. 입력 항목이 동일한 프로그램 실행 중에 일찍 변환 된 값 인 경우, 결과의 포인터는 해당 값과 동일합니다. 그렇지 않으면 %p
변환의 동작이 정의되지 않습니다.
n
입력이 소비되지 않습니다. 해당 인수는 정수 유형이어야하며,이 호출은 scanf
함수로 지금까지 입력 스트림에서 읽은 문자 수를 변환해야합니다. %n
지침의 실행은 scanf
함수 실행이 완료 될 때 반환 된 할당 수를 증가시킵니다. 변환 사양에 과제 억제 문자가 포함 된 경우 인수는 소비되지 않습니다. 옵션 너비 필드는 무시됩니다.
%
단일 '%'
문자와 일치합니다. 전환 또는 할당이 발생하지 않습니다. 전체 변환 사양은 %%
입니다. (즉, %%
단일 일반 문자 %
처럼 취급됩니다).
변환 사양이 유효하지 않으면 동작이 정의되지 않습니다.
변환 지정자 A
, E
, F
, G
및 X
도 유효하며 각각 a
, e
, f
, g
및 x
와 동일하게 작동합니다.
지시문과 일치하지 않는 한, 화이트 스페이스 (새로운 라인 캐릭터 포함)는 읽지 않은 상태로 남아 있습니다. 문자 매치와 억제 된 과제의 성공은 %n
지침을 통해서는 직접 결정할 수 없습니다.