다음: 입력 변환 구문, 이전: 그 밖의 출력 변환, 상위 문서: C 형식 입출력 함수   [차례][찾아보기]


14.2.11 형식 있는 입력

형식 있는 입력을 읽는 scanf, fscanf, sscanf 함수가 있습니다. 이 세 함수에는 두 가지 꼴이 있습니다. 꼴 하나는 기록철의 벡터에서 자료를 뽑아내고, 다른 꼴은 보다 ‘C스럽습니다.’.

[, 개수, 오류_문구] = fscanf (기록철_식별자, , 크기)
[v1, v2, …, 개수, 오류_문구] = fscanf (기록철_식별자, , "C")

첫 번째 꼴은 기록철_식별자를 읽어 행렬 을 되돌려줍니다.

선택 인수 크기는 읽을 자료 양을 지정하며, 아래 중 하나를 써도 됩니다.

Inf

최대한 읽어 열 벡터를 되돌려줍니다.

nr

 원소를 nr개 만큼 읽어 열 벡터를 되돌려줍니다.

[nr, Inf]

가능한 많이 읽어 행이 nr개인 행렬을 되돌려줍니다. 읽은 원소 개수가 nr의 정수배가 아니면, 마지막 열을 0으로 메꿉니다.

[nr, nc]

원소를 nr * nc개 만큼 읽어 행이 nr개인 행렬을 되돌려줍니다. 읽은 원소 개수가 nr의 정수배가 아니면, 마지막 열을 0으로 메꿉니다.

크기를 주지 않으면, Inf로 가정합니다.

에서 문자 변환만 지정하면, 문자열을 되돌려줍니다.

읽는데 성공한 항목 개수는 개수에 되돌려줍니다.

오류가 발생하면 운영체제에 따른 오류 안내가 오류_문구에 포함되어 나옵니다.

두 번째 꼴은 기록철_식별자를 읽되, 에 있는 변환 규제자 낱낱을 각각 스칼라 값으로 되돌려줍니다. 이 꼴이 더 “C스럽고” 구형 옥타브와도 호환됩니다. 변환에 성공한 횟수는 개수에 되돌려줍니다.

틀 문자열에 관한 완전한 설명은 그누 옥타브 사용설명서의 형식 있는 입력 절을 참고하십시오.

같이 보기: fgets, fgetl, fread, scanf, sscanf, fopen.

[, 개수, 오류_문구] = scanf (, 크기)
[v1, v2, …, 개수, 오류_문구] = scanf (, "C")

이 함수는 fscanf기록철_식별자stdin을 넣어 부르는 것과 같습니다.

현재 scanf를 대화형 풀그림에서 부르는 것은 유용하지 않습니다.

같이 보기: fscanf, sscanf, printf.

[, 개수, 오류_문구, 자리] = sscanf (문자열, , 크기)
[v1, v2, …, 개수, 오류_문구] = sscanf (문자열, , "C")

흐름 대신 문자열 문자열에서 문자를 가져온다는 점만 빼면 fscanf와 비슷합니다.

문자열 끝 도달을 기록철 끝처럼 다룹니다. fscanf가 되돌려주는 값에 더하여, 다음에 읽을 문자의 색인을 자리에 되돌려줍니다.

같이 보기: fscanf, scanf, sprintf.

틀 문자열로 인수를 읽기 때문에 scanfprintf가 겉으로 보기에는 비슷해 보입니다. 그러나 scanf의 틀에 적는 변환 품목 구문이 printf에 적는 것과 비슷해 보일지라도, scanf의 틀 해석은 printf의 기록란에 얽매인 형식보다 더 자유롭고 간단한 경향 일치에  방점을 둡니다. 예를 들어, 많은 scanf 변환은 입력한 기록철에 “공백”(빈칸, 긴빈칸, 새줄 포함)이 많으나 적으나 공백을 건너 뛰고, 수치 입력 변환에 정밀도가 규정되어 있지 않지만, 이름이 같은 출력 변환은 정밀도가 규정되어 있습니다. 대개 틀에 있는 공백이 아닌 문자는 입력 흐름에서 꼭 일치할 것을 요구합니다.

일치에 실패하면, scanf는 바로 처음으로 일치하지 않은 문자를 흐름에서 다음에 읽을 문자로 남기고, 변환에 성공한 모든 항목을 내놓습니다.

형식 있는 입력 함수는 형식 있는 출력 함수처럼 자주 사용하지 않습니다. 형식 있는 입력 함수를 제대로 쓰려면 어느정도 노력이 필요하기 때문일 것입니다. 또한 일치 오류를 고치기 어려운 점도 한몫합니다.


다음: 입력 변환 구문, 이전: 그 밖의 출력 변환, 상위 문서: C 형식 입출력 함수   [차례][찾아보기]