getch (), getche () 와 getchar () 사이의 차이

7297 단어 char
우선 getch () 를 사용하려면 헤더 파일conio를 도입해야 한다는 것을 잊지 마십시오.h, 이전에 C 언어를 배웠을 때 우리는 항상 프로그램의 끝에 그것을 덧붙여서 프로그램이 실행되고 종료되지 않는 효과를 실현하는 것을 좋아했다.이 말을 추가하지 않으면TC2.0의 환경에서 우리가Ctrl+F9로 컴파일하고 실행한 후에 프로그램이 실행이 끝나면 TC 환경으로 되돌아간다. 우리는 결과를 볼 겨를이 없다. 이때 결과를 보고 Alt+F5를 누르여DOS 환경으로 돌아가 결과를 보아야 한다. 이것은 매우 번거롭다.프로그램의 끝에 getch () 줄을 추가하면문장, 우리는 DOS에서 결과를 보는 이 절차를 줄일 수 있다. 프로그램이 실행이 끝나면 종료하지 않고, 프로그램이 마지막에 화면을 멈추고 임의의 키를 눌러야 TC 환경으로 되돌아갈 수 있기 때문이다.getch()가 도대체 어떤 역할을 하는지 살펴보자. getch()는 실제적으로 입력 명령이다. 예를 들어 우리가cin>>을 사용할 때 프로그램이 멈추고 입력을 기다리는 것과 같다. getch()와 달리 getch()는 키보드에서 문자를 수신하고 이 문자를 표시하지 않는다. 즉, 키를 눌렀을 때 화면에 네가 눌렀던 것을 표시하지 않고 다음 코드를 계속 실행한다.그래서 우리는 C++에서 프로그램에서 getch () 를 만나는 '임의의 키를 누르면 계속' 효과를 실현할 수 있다.이 문장은 프로그램을 멈추고 임의의 키를 누르면 이 문자 키를 받은 후에 다음 코드를 계속 실행합니다.
우리는 왜 C++에서 프로그램의 끝에 getch () 를 붙이지 않았는지 물어볼지도 모른다. 소프트웨어는 항상 업데이트되고, 좋지 않은 부분은 당연히 고쳐야 한다. getch () 는 프로그램의 끝에 붙이고, 변수는 부여하지 않기 때문에 이 곳에서는 완전히 스팸 코드이며, 프로그램과 무관하다.C++에서는 이 점을 고려하여 매번 프로그램이 실행될 때마다 종료하지 않고 자동으로 화면을 멈추고 "press any key..."를 표시합니다.임의의 키를 누르고 종료하라고 합니다. 이것은 C++가 환경에서 프로그램을 실행하고 프로그램의 끝에 getch () 를 자동으로 추가하는 것과 같습니다.문장, 그리고 이 문장 앞에 출력 문장cout<<"press any key..."를 추가합니다.프로그램이 끝났다는 것을 알리기 위해 임의의 키를 누르고 계속하세요.실제로 우리가 컴파일한 프로그램은 프로그램이 끝난 것 자체가 멈추지 않는다. 컴파일된 Debug 디렉터리에서 이 컴파일된 프로그램(확장자 exe)을 찾을 수 있다. 폴더에서 두 번 눌러서 실행하면 화면이 깜빡거리면 MS-DOS 창이 닫힌다. 프로그램이 실행되면 자동으로 종료되고 윈도우즈 환경으로 돌아간다. 물론 우리가 DOS 환경에서 이 프로그램을 실행한다면프로그램이 실행된 후에 화면이 정리되지 않기 때문에 DOS 화면에서 프로그램 실행 결과를 직접 볼 수 있습니다.
getch () 와 비슷한 문장이 하나 더 있습니다. getche () 도 헤더 파일conio를 도입해야 합니다.h, 그럼 그것들 사이의 차이는 또 어디에 있습니까?
다른 점은 getch () 가 되돌아오는 디스플레이가 없고 getche () 가 되돌아오는 디스플레이가 있다는 것이다.뭐라고 해야 되지?내가 예를 들면 너는 곧 알게 될 것이다.
--------------------------------------
#include<stdio.h>
#include<conio.h>
void main()
{
    char ch;
    for(int i=0;i<5;i++)
    {
        ch=getch();
        printf("%c",ch);
    }
}

--------------------------------------
여기에 출력을 입력하면 나는 C의 함수 라이브러리를 사용하고 C++의 iostream을 사용하지 않습니다.h, 이건 이따가 얘기할게요.우선 이것은 5번의 연속적인 순환으로 5번의 정지를 실현하고 입력을 기다린다. 우리는 이 프로그램을 컴파일하고 실행한다. 만약에 우리가 각각 abcde를 입력한다면 화면에 나타난 결과는 abcde이다. 이 abcde는ch=getch()가 아니다.에서 출력한 것은 printf("%c",ch)입니다.이 줄의 문장을 없애면 우리가 임의의 키를 다섯 번 누르면 프로그램이 끝납니다. 그러나 화면에는 아무것도 표시되지 않습니다.
그리고 코드에 있는 getch () 를 getche () 로 바꿔서 무엇이 다른지 보고 abcde를 각각 입력합니다. 이 때 화면에 나타난 결과는 aabbccddee입니다. printf ("% c",ch) 를 사용합니다.이 줄의 문장을 다시 삭제해 보면 abcde가 나타납니다.ch=getche () 를 실행하고 있음을 설명합니다.이 문장은 우리가 입력한 키를 화면에 되돌려주는 것이 유일한 차이점이다.
자, C++ 함수 라이브러리를 사용하지 않는 이유를 다시 한 번 말씀드리겠습니다.이 프로그램을 C++ 형식으로 바꾸어 보십시오:
--------------------------------------
#include<iostream.h>
#include<conio.h>
void main()
{
    char ch;
    for(int i=0;i<5;i++)
    {
        ch=getch();
        cout<<ch;
    }
}

--------------------------------------
너는 운행 결과가 완전히 다르다는 것을 알게 될 것이다. 솔직히 나도 그것이 어떻게 컴파일되어 운행되는지 모르겠다. 이전에 나는 C++에서 그것을 이용하여 임의의 키를 계속 유지하는 기능을 실현하면서 이 문제를 발견했다.
getch()에 있는 경우뒤에 cout<<"......"이 있습니다.문장이라면 그는 먼저 아래의cout<<"......"를 집행할 것이다.그리고 getch () 실행하기;정지를 실현하고 때때로 두 문장 중간에cout<어떤 사람은 C의 함수 라이브러리에 있는 이상 도태시켜야 한다고 말할 것이다. 우리는 그것을 연구하는데 그것을 왜 사용합니까?그러나 나는 여전히 그것을 쓸 수 있는 곳이 있다는 것을 발견했다. 그렇지 않았다면 나도 여기서 이렇게 많은 말을 해서 모두의 시간을 지체하지 않았을 것이다.예를 들겠습니다. 절차는 다음과 같습니다.
--------------------------------------
#include<stdio.h>
#include<conio.h>

void main()
{
    char ch='*';
    while(ch=='*')
    {
        printf("
* , !"); ch=getch(); } printf("
!"); }

--------------------------------------
  
우리는 이 순환체에 우리가 원하는 기능을 추가할 수 있다. 프로그램에서 *를 누르면 계속 순환하고 다른 임의의 키를 누르면 종료할 수 있다. 그리고 getch()의 반사되지 않는 특성을 이용하여 우리는 무엇을 눌러도 화면에 흔적을 남기지 않고 우리의 인터페이스를 아름답게 할 수 있다. 만약에 이 기능을 실현하는 더 좋은 방법이 있다면 나는 여기서 이렇게 많은 것을 언급하지 않을 것이다.만약 당신이 정말 더 좋은 방법이 있다면, 반드시 나에게 알려주십시오. 감사합니다.
다음은 내가 다른 사람의 홈페이지에 있는 몇 가지 예를 다음과 같이 옮겨 싣는다.
--------------------------------------
//  :         getch() getche()   
#include<stdio.h>
#include<conio.h>

//       :              ,    C  ,      conio.h   
//    getch();(      ),       ,         #include<conio.h>   ,
//          ,            C++   ,        ,
//  ,       !

void main()
{ 
    char c, ch;
    c=getch();     /*                   c*/
    putchar(c);    /*     */
    ch=getche();   /*                    ch*/
    putchar(ch);
    printf("

"); }

--------------------------------------
//  :                     
#include<stdio.h>
#include<conio.h>
void main()
{
    char c, s[20];
    printf("Name:");
    gets(s);
    printf("Press any key to continue...

"); getch(); /* */ printf("

"); }

--------------------------------------
//  :getchar()              ,    。             :
//   getchar()              ,                    。
//                   。
#include<stdio.h>
#include<conio.h>
void main()
{
    char c;
    c=getchar();   /*             */
           //getchar()                   ,        c
    putchar(c);    /*          */
    printf("

"); }

--------------------------------------
//  :  ,         ,         
#include<stdio.h>
#include<conio.h>
void main()
{
    char c;
    while ((c=getchar())!='
') /* getchar() */ printf("%c",c); /* */ printf("

"); }

--------------------------------------
예4의 프로그램이 실행될 때, 우선 멈추고, 문자열을 입력하고, 입력이 끝난 후에, 프로그램이 입력한 모든 문자열을 잃었다. 어, getchar () 는 첫 번째 문자만 되돌려준다고 하지 않았니? 여기는 어때?
서두르지 마, 내가 천천히 설명할게, 조금만 참아, 곧 끝날 거야.왜냐하면 우리가 입력한 문자열은 첫 번째 문자를 취하고 남은 문자열을 버리는 것이 아니기 때문이다. 이것은 우리의 메모리에 있다. 예를 들어 수문을 열고 물을 넣는 것이다. 우리가 물을 수문에 넣은 후에 수문을 한 번 열면 조금씩 놓고 한 번 열면 조금씩 놓는다. 우리가 입력한 문자열도 마찬가지다. 먼저 우리가 입력한 문자열은 메모리의 버퍼에 넣는다.getchar () 를 한 번 호출하면 버퍼에 가장 가까운 문자를 출력합니다. 즉, 맨 앞의 문자를 출력한 다음, 출력한 후에 그것을 방출합니다. 그러나 뒤에 문자열이 있습니다. 그래서 우리는 순환 조건이 충족되지 않을 때까지 맨 앞의 문자를 메모리에서 하나씩 방출합니다.예에서 순환 조건의'실제로는 당신이 문자열을 입력한 후의 리턴 문자입니다. 그래서 리턴 문자를 만나야만 순환을 끝낼 수 있고 getchar() 함수는 입력을 기다리다가 리턴 문자를 눌러야 끝나기 때문에 전체 문자열의 출력을 실현할 수 있습니다.물론, 우리도 순환 조건을 바꿀 수 있다. 예를 들어while ((c=getchar ())!='a'), 무슨 뜻이야? 문자'a'를 만나면 순환을 멈춘다는 뜻이야.

좋은 웹페이지 즐겨찾기