formatting i o printf
이 자습서에서는 C ++에서 입력 / 출력 형식을 지정하는 데 사용되는 printf, sprintf, scanf와 같은 함수의 사용법과 예를 설명합니다.
이전 C ++ 자습서에서 cin / cout을 사용하여 C ++에서 입력-출력 작업을 수행 할 수 있음을 확인했습니다.
이러한 구조를 사용하는 것 외에도 C 라이브러리를 사용할 수도 있습니다. C 표준 입력 및 출력 라이브러리 (cstdio, C 언어의 stdio.h 헤더에 해당하는 C ++)를 사용하여 키보드 (표준 입력), 프린터, 터미널 (표준 출력)과 같은 물리적 장치에서 작동하는 '스트림'을 사용하여 I / O 작업을 수행합니다. ) 또는 운영 체제에서 지원하는 기타 파일 형식.
=> 여기에서 심층 C ++ 교육 자습서를 확인하십시오.
스트림은 물리적 장치와 일관된 방식으로 상호 작용하는 데 사용되는 추상 엔티티 일뿐입니다. 모든 스트림은 유사한 특성을 가지며 물리적 미디어 장치와 독립적입니다.
이 튜토리얼의 다음 주제에서는 printf, sprint 및 scanf와 같은 몇 가지 함수에 대해 자세히 알아 봅니다.
학습 내용 :
C ++ printf
C ++의 printf 함수는 stdout으로 형식화 된 출력을 작성하는 데 사용됩니다.
기능 프로토 타입 :
int printf (const char * 형식,…);
매개 변수 :
형식 => 파일 스트림에 기록 된 null로 끝나는 문자열에 대한 포인터입니다. %로 시작하는 선택적 형식 지정자와 함께 문자로 구성됩니다. 형식 지정자는 형식 문자열 뒤에 오는 적절한 값으로 대체됩니다.
… => 형식이 지정된 순서로 인쇄 할 데이터를 지정하는 기타 추가 인수입니다.
반환 값 :
최고의 음성-텍스트 소프트웨어
성공 => printf는 반환 된 문자 수를 반환합니다.
실패 => 음수 값
기술:
printf 함수는 헤더에 정의되어 있습니다. printf 함수는 'format'포인터가 가리키는 문자열을 표준 출력 표준 출력에 기록합니다. 형식 문자열은 형식 지정자를 포함 할 수 있으며 이는 추가 인수로 printf 함수에 전달 된 변수로 대체됩니다 (형식 문자열 뒤).
printf () 함수에 사용되는 형식 지정자
형식 지정자의 일반적인 형식은 다음과 같습니다.
%(flags)(width)(.precision)(length)specifier
다음은 형식 지정자의 각 부분에 대한 설명입니다.
- % 기호 : 이것은 선행 % 기호입니다.
- 플래그 : 다음 값을 가질 수 있습니다.
- – : 왼쪽은 필드 내에서 결과를 정렬합니다. 기본적으로 오른쪽 맞춤입니다.
- + : 긍정적 인 결과를 포함하여 값의 시작 부분에 첨부 된 결과의 부호.
- 공백 : 기호가 없으면 결과 시작 부분에 공백이 추가됩니다.
- # : 대체 형식의 변환을 지정하십시오.
- 0 : 정수 및 부동 소수점 숫자에 사용됩니다. 공백이없는 경우 선행 0으로 작동합니다.
- 폭: * 또는 정수 값의 형식으로 최소 필드 너비를 지정합니다. 이것은 선택 사항입니다.
- 정도: '.'뒤에 * 또는 정수 또는 아무것도없는 정밀도를 지정합니다. 이것은 또한 선택 사항입니다.
- 길이: 인수의 크기를 지정한 선택적 인수입니다.
- 지정자 : 변환 형식 지정자입니다.
C ++에서 사용되는 다양한 형식 지정자는 다음과 같습니다.
하지 마라 | 지정자 | 기술 |
---|---|---|
7 | 유 | 부호없는 정수를 10 진수 표현으로 변환합니다. |
1 | % | %를 인쇄합니다. |
두 | 씨 | 단일 문자를 인쇄합니다. |
삼 | 에스 | 문자열을 인쇄합니다. |
4 | d / i | 부호있는 정수를 10 진수 표현으로 변환합니다. |
5 | 또는 | 부호없는 정수를 8 진수 표현으로 변환합니다. |
6 | 더블 엑스 | 부호없는 정수를 16 진 표현으로 변환합니다. |
8 | f / F | 부동 소수점 숫자를 10 진수 표현으로 변환합니다. |
9 | 및 / E | 부동 소수점 숫자를 10 진수 지수 표기법으로 변환합니다. |
10 | a / A | 부동 소수점 숫자를 16 진 지수로 변환합니다. |
열한 | g / g | 부동 소수점 숫자를 10 진수 또는 10 진수 지수 표기법으로 변환합니다. |
12 | 엔 | 이 함수 호출로 지금까지 쓴 문자 수입니다. |
13 | 피 | 구현 정의 문자 시퀀스를 가리키는 포인터. |
아래에 위에서 설명한 printf 함수를 보여주는 완전한 C ++ 프로그래밍 예제가 있습니다.
C ++ printf 예제
#include //C++ printf example int main() { char ch = 'A'; float a = 8.0, b = 3.0; double d = 3.142; int x = 20; printf('float division : %.3f / %.3f = %.3f
', a,b,a/b); printf('Double value: %.4f
', d); printf('Setting width %*c
',4,ch); printf('Octal equivalent of %d is %o
',x,x); printf('Hex equivalent of %d is %x
',x,x); return 0; }
산출:
위의 프로그램은 printf 함수에 대한 다양한 호출을 사용하며 printf에 대한 각 호출은 위에서 논의한 다양한 형식 지정자를 사용합니다. 형식 지정자 % .3f는 소수점 이하 3 자리까지의 부동 소수점 값을 나타냅니다. 나머지 printf 호출은 문자, 10 진수, 8 진수 및 16 진수 값을 표시합니다.
C ++ 스프린트
C ++의 Sprintf 함수는 한 가지 차이점을 제외하고는 printf 함수와 유사합니다. 출력을 표준 출력 stdout에 쓰는 대신 sprintf는 출력을 문자열 버퍼에 씁니다.
기능 프로토 타입 :
int sprintf (char * 버퍼, const char * 형식,…)
매개 변수 :
버퍼 => 결과가 기록 될 문자열 버퍼에 대한 포인터.
형식 => 파일 스트림에 기록되는 널 종료 문자열에 대한 포인터.
참고 : sprintf 함수에 사용 된 형식 문자열은 printf 함수 설명의 일부로 논의 된 것과 동일합니다.
… => 형식이 지정된 순서로 인쇄 할 데이터를 지정하는 기타 추가 인수입니다.
반환 값 :
성공 => 종료 널 문자를 제외하고 충분히 큰 버퍼에 기록 된 문자 수를 리턴합니다.
실패 => 음수 값이 반환됩니다.
기술:
Sprintf 함수는 헤더에 정의되어 있습니다. sprintf 함수는 형식이 가리키는 문자열을 문자열 버퍼에 쓰는 데 사용됩니다. 문자열 형식은 추가 인수로 sprintf () 함수에 전달되는 변수 값으로 대체되는 %로 시작하는 형식 지정자를 포함 할 수 있습니다.
sprintf 함수의 사용법을 보여주는 예제 C ++ 프로그램을 보겠습니다.
sprintf 예
#include #include using namespace std; int main() { char mybuf(100); int retVal; char name() = 'Software Testing Help'; char topic() = 'C++ tutorials'; retVal = sprintf(mybuf, 'Hi, this is %s and you are reading %s !!', name, topic); cout << mybuf << endl; cout << 'Number of characters written = ' << retVal << endl; return 0; }
산출:
위의 예에서 먼저 sprintf 함수를 사용하여 문자 버퍼 mybuf에 형식화 된 문자열을 씁니다. 그런 다음 cout을 사용하여 문자열을 stdout에 표시합니다. 마지막으로 mybuf 버퍼에 기록 된 문자 수를 표시합니다.
C ++ 스캔
C ++의 scanf 함수는 표준 입력 stdin에서 입력 데이터를 읽습니다.
기능 프로토 타입 :
int scanf (const char * 형식,…)
매개 변수 :
형식 => 입력을 읽는 방법을 정의하는 널로 끝나는 문자열에 대한 포인터. 이 형식 문자열은 형식 지정자로 구성됩니다.
… => 데이터 입력을받는 추가 인수입니다. 이러한 추가 인수는 형식 지정자에 따라 순서대로 지정됩니다.
반환 값 :
성공 => 읽은 문자 수를 반환합니다.
matchingFailure => 첫 번째 수신 인수가 할당되기 전에 일치 실패가 발생하면 0을 반환합니다.
입력 실패 => 첫 번째 수신 인수가 할당되기 전에 입력 실패가 발생하면 EOF를 반환합니다.
기술:
Scanf () 함수는 헤더에 정의되어 있습니다. 이 함수는 stdin에서 데이터를 읽고 제공된 변수에 저장합니다.
scanf () 함수에서 사용되는 형식 지정자
scanf () 함수 형식 문자열의 일반 형식은 다음과 같습니다.
%(*)(width)(length)specifier
따라서 형식 지정자는 다음 부분으로 구성됩니다.
- 공백이 아닌 문자 : 입력 스트림에서 동일한 문자 하나를 소비하는 %를 제외한 문자입니다.
- 공백 문자 : 연속 된 모든 공백 문자는 하나의 공백 문자로 간주됩니다. 이스케이프 시퀀스도 마찬가지입니다.
- 변환 사양 : 형식은 다음과 같습니다.
- % : 시작을 지정하는 문자입니다.
- * : 할당 억제 문자라고합니다. 있는 경우 scanf는 결과를 수신 매개 변수에 할당하지 않습니다. 이 매개 변수는 선택 사항입니다.
- 필드 너비 : 최대 필드 너비를 지정하는 선택적 매개 변수 (양의 정수).
- 길이: 인수를받는 크기를 지정합니다.
변환 형식 지정자는 다음과 같을 수 있습니다.
하지 마라 | 형식 지정자 | 기술 |
---|---|---|
7 | 더블 엑스 | 부호없는 16 진 정수와 일치합니다. |
1 | % | 리터럴 %와 일치합니다. |
두 | 씨 | 단일 문자 또는 최대 너비까지 여러 문자와 일치합니다. |
삼 | 에스 | 지정된 너비 또는 첫 번째 공백까지 공백이 아닌 문자 시퀀스와 일치합니다. |
4 | 디 | 십진수와 일치합니다. |
5 | 나는 | 정수와 일치합니다. |
6 | 또는 | 부호없는 8 진 정수와 일치합니다. |
8 | 유 | 부호없는 십진 정수와 일치합니다. |
9 | a / A, e / E, f / F, g / G | 부동 소수점 숫자와 일치합니다. |
10 | (세트) | 주어진 세트에서 비어 있지 않은 문자 시퀀스와 일치합니다. ^가 앞에 있으면 세트에없는 문자가 일치합니다. |
12 | 엔 | 지금까지 읽은 문자 수를 반환합니다. |
13 | 피 | 구현 특정 문자 시퀀스에 대한 포인터. |
다음으로, 우리는 C ++에서 scanf 함수의 사용법을 보여주는 샘플 프로그램을 구현할 것입니다.
scanf 예
#include int main () { char str (80), pos_str(80); int i; printf ('Enter your company name: '); scanf ('%79s',str); printf ('Enter your position: '); scanf ('%s',pos_str); printf ('You work at %s as %s.
',str,pos_str); printf ('Enter a hexadecimal number: '); scanf ('%x',&i); printf ('You have entered %#x (%d).
',i,i); return 0; }
산출:
위의 프로그램에서 두 개의 입력 문자열과 16 진수를 읽습니다. 그런 다음 두 문자열을 결합하고 결과 문자열을 표시합니다. 숫자는 10 진수로 변환되어 표시됩니다.
scanf / printf 대. C ++에서 cin / cout
scanf / printf | cin / 비용 |
---|---|
C 언어의 표준 입출력. | C ++ 언어로 된 표준 입출력. |
'stdio.h'에 정의되어 있습니다. | 'iostream'에 정의되어 있습니다. |
scanf 및 printf는 I / O에 사용되는 함수입니다. | cin과 cout은 스트림 객체입니다. |
형식 문자열은 입력 및 출력 형식을 지정하는 데 사용됩니다. | 연산자 >> 및<< are overloaded and used along with cin and cout respectively. 형식 문자열이 사용되지 않습니다. |
자리 표시자를 사용하여 데이터 유형을 지정합니다. | 데이터 유형을 지정할 필요가 없습니다. |
자주 묻는 질문
Q # 1) C ++에서 printf를 사용할 수 있습니까?
대답: 예. Printf는 C ++에서 사용할 수 있습니다. C ++ 프로그램에서이 함수를 사용하려면 프로그램에 헤더를 포함해야합니다.
Q # 2) printf를 사용하는 언어는 무엇입니까?
대답: Printf는 C 언어의 표준 출력 함수입니다. C ++ 프로그램에 헤더를 포함시켜 C ++ 언어로도 사용할 수 있습니다.
Q # 3) C 프로그래밍에서 % d는 무엇입니까?
대답: printf 함수의 % d 값이 정수 값을 참조합니다.
Q # 4) 왜 &가 Scanf에서 사용됩니까?
대답: & 연산자는 메모리 위치에 액세스하는 데 사용됩니다. 변수를 명시 적으로 전달하는 대신 포인터를 변수에 전달하는 것은 속기입니다.
Q # 5) printf ()와 sprintf ()의 차이점은 무엇입니까?
대답: printf () 및 sprintf () 함수는 하나의 차이점을 제외하고 동일합니다. printf ()가 출력을 stdout (표준 출력)에 쓰는 동안 sprintf는 출력을 문자열 버퍼에 씁니다.
Q # 6) Sprintf null이 종료됩니까?
대답: sprintf는 널 종료 문자를 제외하고 문자열 배열에 저장된 문자 수를 리턴합니다.
Q # 7) sprintf가 안전하지 않은 이유는 무엇입니까?
대답: Sprintf 함수는 대상 버퍼의 길이를 확인하지 않습니다. 따라서 형식 문자열의 길이가 너무 길면 함수가 대상 버퍼의 오버플로를 유발할 수 있습니다. 이로 인해 애플리케이션 불안정 및 보안 문제가 발생하여 sprintf 기능이 안전하지 않게 될 수 있습니다.
결론
이 튜토리얼에서는 C header에 해당하는 헤더를 포함하여 C ++에서 사용할 수있는 C 라이브러리 입력-출력 함수 – printf, sprintf 및 scanf를 배웠습니다.
이미 논의했듯이 입력-출력 함수는 형식 지정자 및 자리 표시자를 사용하며 데이터를 읽거나 쓰는 변수의 데이터 유형을 지정해야합니다.
이와 반대로 C ++ – cin 및 cout에서 사용되는 스트리밍 객체는 형식 지정자 또는 자리 표시자를 사용하지 않습니다. 그들은 과부하 >>를 사용하고<< operators to read in and write the data.
=> 여기에서 완벽한 C ++ 교육 가이드를 확인하십시오.