C++에서 iostream 클래스로 콘솔 관리

Managing Console With Iostream Classes C



컴퓨팅에서 콘솔은 컴퓨터 키보드와 컴퓨터 모니터입니다. 과거에는 출력이 모니터에 표시되는 창이 아니라 모니터 화면으로 직접 전송되었습니다. 일반 컴퓨터 사용자의 경우 오늘날 응용 프로그램은 모니터를 명시적으로 사용하지 않습니다. 이러한 응용 프로그램은 모니터에 표시되는 창을 사용합니다. 그러나 컴퓨터 프로그래머는 여전히 모니터 화면을 사용해야 합니다. 프로그래머는 여전히 모니터 화면을 사용해야 하지만 운영 체제에서는 그렇게 할 수 없습니다. 운영 체제는 모니터 화면을 시뮬레이션하는 창을 제공합니다. Windows 운영 체제에서 이 창을 명령 프롬프트라고 합니다. Linux 운영 체제 및 그 변형에서 이 창을 터미널이라고 합니다.

독자는 이미 명령 프롬프트 또는 터미널 사용법을 알고 있을 것으로 예상됩니다. 이 문서에서는 키보드에서 문자와 문자열을 읽고 문자와 문자열을 터미널(또는 명령 프롬프트)로 보내는 방법에 대해 설명합니다. 모든 C++ 프로그래머는 이 기사에서 알아야 합니다.







키보드에서 입력을 받고 터미널로 출력하려면 프로그램은 다음으로 시작해야 합니다.



#포함하다
사용 네임스페이스시간;

기사 내용

표준 iostream의 좁은 스트림 객체

iostream 클래스, 표준 개체 cout, cin, cerr 및 clog는 인스턴스화되었으며 이미 표준 라이브러리에 있습니다. 프로그래머는 다시 인스턴스화하지 않고 그냥 사용합니다.



비용

main() 함수의 다음 명령문은 This is output이라는 텍스트를 보냅니다. 터미널에:





비용 << '출력입니다.';

cout은 이미 인스턴스화된 표준 라이브러리의 출력 iostream 객체입니다.<< is the insertion operator, which sent the bytes, This is output. to the output stream object, cout. When the statement is executed, the text appears on the screen.

위의 문장을 사용하면 출력 구문 오른쪽에 다시 표시된 명령 프롬프트가 나타납니다. 다음 줄로 이동하지 않습니다. 다음 명령문의 끝에 endl 은 화면에 의해 인쇄된 내용을 다음 줄로 강제 실행합니다.



비용 << '출력입니다.' <<;

endl은 미리 정의된 변수입니다. 다음을 사용하여 화면 내용을 다음 줄로 강제 지정할 수도 있습니다.

비용 << '출력입니다.' << 'N';

' '을 사용하면 모든 텍스트 줄이 화면에 즉시 나타나지 않을 수 있습니다. endl은 전체 텍스트 줄을 화면에 플러시합니다.

참고: cout에 전송된 문자열은 큰따옴표로 묶여 있고 전송된 문자는 작은따옴표로 묶여 있습니다. 일련의 문자열과 문자를 하나의 명령문으로 보낼 수 있습니다.<< . All that will appear in one line at the output if ‘ ’ is not in the series.

cin은 이미 인스턴스화되고 표준 라이브러리에서 사용할 수 있는 표준 iostream 입력 개체입니다. main() 함수에서 다음 코드 세그먼트를 고려하십시오.

txt[오십];
비용 << '단어를 입력하고 Enter를 누르십시오:' txt;
비용 <<txt<<;

첫 번째 문은 50자의 빈 배열을 선언합니다. 두 번째 명령문은 사용자에게 다음 화면 줄에 단어를 입력하고 Enter 키를 누르도록 지시합니다. 사용자가 화면의 다음 줄에 텍스트를 입력하도록 강제하는 'endl'의 사용에 유의하십시오. 사용자가 텍스트를 입력하면 입력된 텍스트가 cin 개체로 이동하는 동안 화면에 에코됩니다. Enter 키를 누르면 코드 세그먼트의 세 번째 명령문이 실행됩니다. 이 세 번째 명령문은 입력된 텍스트를 변수 txt로 보냅니다. 이 경우 입력한 텍스트는 50자를 넘지 않아야 합니다. 추출 연산자 >>의 사용에 유의하십시오. 마지막 문은 입력한 텍스트를 화면에 표시합니다.

cin은 공백으로 구분하여 키보드에서 두 개 이상의 단어를 사용할 수 있습니다. 이 단어는 다른 변수로 추출해야 합니다. 다음 코드 세그먼트는 이를 보여줍니다.

txt[스물];
정수그것;
뜨다피트;
비용 << '3개의 값을 입력하고 Enter를 누르십시오:' txt>>그것>>피트;
비용 <<txt<< '' <<그것<< '' <<피트<<;

다음 문장을 참고하세요.

>>txt>>그것>>피트;

첫 번째 단어는 txt로 추출되고 그 다음은 ft로, 마지막 단어는 ft로 추출됩니다.

하나25 3.6

코드 세그먼트의 출력은 다음과 같습니다.

하나25 3.6

세르

다음 프로그램에 오류가 있습니다.

#포함하다
사용 네임스페이스시간;

정수기본()
{
myInt에서;

반품 0;
}

main()의 첫 번째 명령문이 올바르지 않습니다. 코드가 있는 파일의 이름이 temp.cc이고 결과 실행 파일이 temp라고 하는 경우 다음 g++ 명령은 컴파일러 오류 메시지를 error.txt 파일에 보냅니다.

NS++ -o 임시 온도.DC 2>오류.txt

error.txt 파일이 없으면 생성됩니다. g++ 명령의 2>error.txt 부분에 주목하십시오.

화면은 표준 출력 대상이며 표준 오류 대상이기도 합니다. 2>error.txt가 g++ 명령에서 생략되면 컴파일러 오류 메시지는 여전히 화면(모니터)인 표준 오류 대상으로 전송됩니다.

표준 출력 대상을 나타내는 스트림 개체는 cout입니다. 표준 오류 대상을 나타내는 스트림 개체는 cerr입니다. 프로그램 런타임 오류는 다음과 같이 화면에 보낼 수 있습니다.

세르 << '오류 메시지!' << 'N';

나막신

응용 프로그램은 다른 시간에 다른 입력을 받습니다. 모든 입력은 화면에 다시 표시될 수 있습니다. 모든 입력은 파일에 저장할 수 있습니다. 로깅입니다. 표준 로깅 대상은 화면입니다. 표준 로깅 스트림 개체는 나막신입니다. 다음 코드는 입력 텍스트를 화면에 다시 표시합니다.

txt[오십];
비용<<'텍스트를 입력하고 Enter를 누르십시오:'txt;
나막신<<txt<<;

입력 텍스트가 'input_text'이면 clog는 'input_text'를 화면에 다시 표시합니다.

실제로 로깅은 일반적으로 파일로 리디렉션됩니다. 다음 프로그램은 이를 보여줍니다.

#포함하다
사용 네임스페이스시간;

정수기본()
{
프리오픈( '로그.txt','에',표준 출력);

비용 << '입력_텍스트' <<;
}

함수 freopen() 및 해당 인수의 사용에 유의하십시오. 첫 번째 인수는 로그 파일의 이름입니다. 파일이 없으면 생성됩니다. 두 번째 인수는 '쓰기'에 대한 'w'입니다. 세 번째 인수는 표준 출력을 위한 stdout입니다. main() 함수의 두 번째 명령문은 cout을 사용하여 로깅 텍스트를 파일로 보냅니다. 참고: 실제 입력 코드는 이 프로그램에 표시되지 않았습니다.

키보드에서 문자 및 문자열 얻기

사용자가 입력을 입력하는 동안 문자는 입력 스트림 버퍼로 전송되어 화면에 표시됩니다. 사용자가 Enter 키를 누르면 모든 문자가 버퍼에 있습니다. 또한 커서는 화면에서 아래 다음 줄의 시작 부분으로 이동합니다. 그런 다음 프로그램은 입력 읽기 명령문 다음에 다음 프로그램 명령문으로 계속됩니다.

cin 객체에는 이 섹션이 관련된 메서드가 있습니다.

첫 번째 문자 읽기

get(char_type& c):
다음 코드 세그먼트는 입력 스트림 버퍼에서 첫 번째 문자를 읽는 방법을 보여줍니다.

채널;
비용 << '텍스트 입력:' <<;
.가져 오기(채널);
비용 <<채널<<;

첫 번째 문은 할당 없이 문자를 선언합니다. 두 번째 문은 사용자에게 문자를 입력하도록 지시합니다. 사용자가 문자를 입력하고 Enter 키를 누르면 세 번째 명령문이 입력 스트림 버퍼에서 변수 ch로 문자를 복사합니다.

사용자가 두 개 이상의 문자를 입력한 경우에도 첫 번째 문자는 코드 세그먼트에서 가져옵니다.

가져 오기():
인수가 없는 get()은 10진수 ASCII 코드를 반환합니다. 다음 코드 세그먼트를 고려하십시오.

비용 << '텍스트 입력:' <<;
비용 << .가져 오기() <<;

입력이 'asdfg'이면 'a'에 대한 10진수 ASCII 코드인 97이 반환됩니다.

get(char_type* s, 스트림 크기 n)

사용자가 구문을 입력하고 Enter 키를 누르면 첫 번째 문자부터 시작하여 cin 스트림 버퍼에서 여러 문자를 추출할 수 있습니다. 다음 코드를 사용할 수 있습니다.

NS[10];
비용 << '텍스트 입력:' <<;
.가져 오기(str,10);
비용 <<NS<<;

입력이 'great people'이면 출력은 10자가 아니라 9자로 된 'great peo'가 됩니다. 문자열 NUL 문자()는 get 인수에서 10번째 위치를 차지합니다. 따라서 str에 9자를 포함하려면 저장 크기가 최소 10이어야 하고 get() 인수는 11이어야 합니다. 전체 입력 행을 원하는 경우 문자열 저장 번호는 최소한 숫자여야 합니다. 입력된 문자 수에 1을 더한 값입니다. 따라서 전체 줄에 12자를 입력한 경우 문자열(str) 저장 크기는 13이고 get() 인수는 13이어야 합니다. 하나의 공백은 하나의 문자로 계산됩니다.

get(char_type* s, 스트림 크기 n, char_type 구분 기호)
오른쪽에서 구분된 하위 문자열, 특정 문자의 첫 번째 출현 또는 하위 문자열의 스트림 크기 중 먼저 오는 것 중에서 추출하는 것이 가능합니다. 다음 코드에 대한 입력 텍스트가 great people이면 great가 추출됩니다.

NS[30];
비용 << '텍스트 입력:' <<;
.가져 오기(str,6,'또는');
비용 <<NS<<;

처음부터 여섯 번째 위치는 공백 문자이며 추출된 하위 문자열을 독점적으로 구분합니다. 여섯 번째 위치는 유일한 문자 'o'보다 먼저 옵니다. str의 저장소 크기는 가능한 한 높을 수 있습니다.

다음 코드에 대한 입력 텍스트가 훌륭한 사람이면 gr이 추출됩니다.

NS[30];
비용 << '텍스트 입력:' <<;
.가져 오기(str,10,'그리고');
비용 <<NS<<;

'e'의 첫 번째 출현은 10번째 위치보다 먼저 옵니다.

라인의 모든 문자 얻기

Enter 키를 누르면 행에 입력된 모든 문자를 다음 코드와 같이 얻을 수 있습니다.

비용 << '텍스트 입력:' <<;
동안 (1) {
채널= ().가져 오기();
비용 <<채널;
만약 (채널== 'N')
부서지다;
}

(char)를 사용한 캐스팅은 각 십진수를 해당 ASCII 문자로 변환합니다.

몰래 엿보다()

get() 멤버 함수는 다음 문자만 읽는 것이 아닙니다. 스트림 버퍼에서 제거합니다. 그러나 peek() 멤버 함수 simple은 버퍼에서 제거하지 않고 다음 문자(첫 번째 문자부터 시작)를 읽습니다. 다음 코드에서 각 문자는 get() 함수에 의해 제거되기 전에 먼저 peek() 함수로 읽힙니다. 사용자가 Enter 키를 누른 후에 발생하는 모든 작업:

비용 << '텍스트 입력:' <<;
동안 (1) {
채널= ().몰래 엿보다();
비용 <<채널;
.가져 오기();
만약 (채널== 'N')
부서지다;
}

다음 문자가 get()에 의해 제거되지 않은 경우 peek()은 첫 번째 문자만 읽고 루프는 무기한 반복됩니다.

Enter를 누르기 전에 문자 표시 및 삭제

cin 개체의 경우 Enter 키를 눌러야 작업이 수행됩니다. 글쎄, 입력하는 동안 문자가 표시되고 Enter 키를 누르기 전에 지워지는 것이 가능합니다. 그러나 이는 운영 체제와의 인터페이스를 의미합니다. 운영 체제가 다릅니다. 따라서 이것은 다른 운영 체제에 대해 다른 코딩을 의미합니다. 따라서 이 주제는 완전히 다른 튜토리얼이 필요합니다. 나중에 참조하세요.

모니터에 문자 및 문자열 보내기

cout 개체는 이미 인스턴스화되어 C++ 표준 라이브러리에 있는 출력 스트림 개체입니다. cout은 문자와 문자열을 모니터로 보내는 데 사용되는 주요 개체입니다. 이것은 삽입 연산자로 수행됩니다.<< . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until ‘ ’ or endl is encountered.

스칼라를 생성하는 표현식은 삽입 연산자에 대한 인수가 될 수 있습니다. 연산자는 스칼라를 텍스트로 변환하고 텍스트를 cout 객체 스트림에 배치합니다. 텍스트가 cout 개체로 전송되면 일반적으로 화면(모니터)에 나타납니다. 그러나 때때로 즉시 나타나지 않을 수 있습니다. 화면에 텍스트를 강제로 표시하려면 텍스트를 삽입한 직후에 특수 값 endl을 삽입하십시오. 이렇게 하면 텍스트가 화면에 플러시되고 개행이 추가됩니다. 참고: ' '은 단순히 줄 바꿈을 추가하지만 화면에 텍스트를 플러시하지 않습니다.

다음 프로그램은 int, float 및 일반 텍스트의 값을 화면에 인쇄하는 방법을 보여줍니다.

#포함하다
사용 네임스페이스시간;

정수기본()
{
정수그것= 5;
뜨다피트= 63.5;
비용 << 'NS ' <<그것<< ' 항목 비용 $' <<피트<< ' 우리를.' <<;

반품 0;
}

출력은 다음과 같습니다.

NS5항목 비용 $63.5우리를.

다음 프로그램은 클래스에서 인스턴스화된 개체의 문자열이 인쇄되는 방법을 보여줍니다.

#포함하다
사용 네임스페이스시간;

구조체{
NS[열하나] = '어떤 단어들';
}오브제;

정수기본()
{
비용 <<사물NS << 'N';

반품 0;
}

출력은 '일부 단어'입니다.

C++ 프로그램에 대한 인수

프로그램 실행은 main() 함수에서 시작됩니다. main() 함수에는 실제로 두 개의 선택적 매개변수가 있습니다. 선택적 매개변수가 있는 main() 함수의 구문은 다음과 같습니다.

정수기본(정수인수, *argv[인수])
{

반품 0;
}

실행 가능한 C++ 파일의 이름이 temp라고 가정합니다. 사용자가 입력한 프로그램이 환경(운영 체제)에서 필요로 하는 인수가 다음과 같다고 가정합니다.

조항책 펜'큰 집'

여기에는 기사, 3, 책, 펜 및 큰 집의 5가지 인수가 있습니다.

각각은 텍스트입니다. 프로그램에 대한 번호가 매겨진 인수는 텍스트입니다. 즉, 각 인수는 문자열입니다. 큰 집은 구이기 때문에 따옴표 안에 있습니다. 이 프로그램을 실행하는 터미널 명령은 다음과 같습니다.

./임시 기사책 펜'큰 집'

temp 파일이 홈 디렉토리에 있다고 가정합니다. 쉼표가 아닌 공백으로 인수를 구분합니다.

이제 main() 함수 구문에서 argc는 프로그램의 인수 수에 1을 더한 것입니다. 이 경우 프로그램에 대한 인수는 5개입니다. 따라서 argc는 6입니다. 구문에서 argv[argc]는 문자열에 대한 포인터 배열입니다. argv[0]에서 이 배열의 첫 번째 값은 컴파일러에서 제공합니다. 프로그램 파일의 이름에 대한 포인터입니다. 나머지 값은 사용자가 입력한 순서대로 프로그램 인수에 대한 포인터입니다. 이 배열의 크기는 argc입니다. 이 경우 크기는 1 + 5 = 6입니다.

컴파일 시 다음 프로그램의 이름이 temp라고 가정합니다.

#포함하다
사용 네임스페이스시간;

정수기본(정수인수,**argv)
{

비용 <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[] << ',' <<argv[4] << ',' <<argv[5] <<;

반품 0;
}

여기서 주의할 점은 'char *argv[argc]' 배열이 'char** argv'로 선언되었다는 점입니다.

이 프로그램을 터미널 명령으로 실행하면,

./임시 기사책 펜'큰 집'

출력은 다음과 같습니다.

./임시 직원,, 책, 펜, 큰 집

디렉토리 경로는 실행 파일의 이름과 함께 포함되었습니다.

또한 프로그램 실행(프로그램 호출)에서 argc의 값이 전송되지 않았음을 유의하십시오.

결론

iostream 클래스에는 cout, cin, cerr 및 clog의 네 가지 중요한 객체가 있습니다. cin은 입력 객체이고 나머지는 출력 객체입니다. 프로그램이 실행되는 동안 프로그램에 대한 입력은 프로그램이 실행을 시작할 때와 다릅니다. 프로그램 실행이 시작되면 프로그램에 대한 입력이 공백으로 구분된 프로그램 실행 명령과 결합됩니다.