C 언어를 사용한 타이핑 연습 프로그램

CBeginner
지금 연습하기

소개

이 프로젝트는 C 프로그래밍 언어를 사용하여 타이핑 연습 프로그램을 만드는 과정을 안내합니다. 단일 문자열, 여러 문자열, 키보드 레이아웃 기반 타이핑 등 다양한 타이핑 연습을 수행하는 방법을 배우게 됩니다. 이러한 프로그램은 타이핑 속도와 정확성을 향상시키는 데 도움이 될 것입니다.

👀 미리보기

Start typing association exercises.
Please enter the hidden character indicated by '?'.
Press the space key to start.
AS?FG
?m,./\
67890-?\
?XCVB
zx?vb
!"?$%
ZXC?B
hjk?;:]
...(omit)...

🎯 과제

이 프로젝트에서는 다음을 배우게 됩니다:

  • C 를 사용하여 타이핑 연습 프로그램을 만드는 방법.
  • 단일 문자열, 여러 문자열, 키보드 레이아웃 연관 연습을 구현하는 방법.
  • 화면 입출력 작업을 위해 curses 라이브러리를 사용하는 방법.
  • 연습의 다양성을 위해 질문 순서를 섞는 방법.

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • 타이핑 연습을 시뮬레이션하는 C 프로그램을 만들 수 있습니다.
  • 사용자 입력을 처리하고 정확성을 검증할 수 있습니다.
  • 무작위 질문을 생성하고 질문 순서를 섞을 수 있습니다.
  • 고급 화면 입출력 작업을 위해 curses 라이브러리를 활용할 수 있습니다.

프로젝트 환경

이 프로젝트는 curses 라이브러리를 사용해야 합니다. 다음 명령을 사용하여 설치하십시오:

sudo apt-get update
sudo apt-get install libncurses5-dev

코드 내의 getputch.h 헤더 파일의 목적은 크로스 플랫폼 화면 입출력 함수 라이브러리를 제공하여, 프로그램이 서로 다른 운영 체제 및 컴파일러 환경에서, 특히 개행 문자 출력을 처리하여 화면 입출력 작업을 올바르게 수행할 수 있도록 보장하는 것입니다.

다음으로, C 언어의 포인터, 문자열 배열, 루프 구조를 주로 사용하는 기본적인 타이핑 연습을 소개합니다.

단일 문자 입력에서 시작하여 여러 개의 정렬되지 않은 단어로 연습하는 것까지, 문자열 배열의 적용을 시연할 것입니다.

✨ 솔루션 확인 및 연습

문자 입력

~/project 디렉토리로 이동하여 프로젝트 파일 typing1a.c를 생성합니다:

cd ~/project
touch typing1a.c

다음으로, 문자열 입력을 허용하는 타이핑 연습 소프트웨어를 만들기 위해 C 코드를 작성해야 합니다. 프로그램은 다음과 같습니다:

#include <time.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include "getputch.h"

int main(void)
{
    int    i;
    char   *str = "How do you do?";     /* The string to be input */
    int    len = strlen(str);           /* Number of characters in the string */

    init_getputch();
    printf("Please type as shown.\n");
    printf("%s\n", str);                /* Display the string to be input */
    fflush(stdout);

    for (i = 0; i < len; i++) {
        int ch;
        do {
            ch = getch();                 /* Read input from the keyboard */
            if (isprint(ch)) {
                putch(ch);                /* Display the pressed key */
                if (ch != str[i])         /* If a wrong key is pressed */
                    putch('\b');          /* Move the cursor back one space */
            }
        } while (ch != str[i]);
    }

    term_getputch();
    return 0;
}

플레이어는 str 포인터가 가리키는 문자열 How do you do?를 입력해야 합니다. 포인터와 배열의 상호 교환 가능성에 의해, 문자열 내의 문자 'H', 'o', ..., '?'는 순차적으로 str[0], str[1], ..., str[13]으로 표현될 수 있습니다.

또한, 변수 len은 문자열 str의 길이를 나타내며 초기 값은 14입니다. strlen()은 문자열의 길이를 얻는 데 사용됩니다.

for 루프는 변수 i의 값을 0, 1, 2, ...에서 len번 반복하여 문자열 내의 문자를 처음부터 끝까지 순차적으로 순회합니다. 각 반복에서 문자 str[i]'H', 'o', ..., '?'이며, 이는 입력해야 하는 문자입니다. 이 타이핑 연습은 잘못된 문자를 허용하지 않습니다 (플레이어가 올바른 문자를 입력할 때까지 프로그램은 다음 문자로 이동하지 않습니다). 이 제어는 do 루프에 의해 보장되며, 루프 내에서 다음 작업이 수행됩니다:

  • 입력 문자 ( getch 함수의 반환 값) 를 변수 ch에 할당합니다.
  • 문자 ch가 인쇄 가능한 문자이면, putch 함수를 사용하여 표시합니다 (개행 및 탭과 같은 표시할 수 없는 문자는 제외).
  • 문자 ch가 입력해야 하는 문자 str[i]와 같지 않으면, 백스페이스 문자 '\b'를 출력하여 커서를 한 칸 뒤로 이동합니다. 이렇게 하면 다음 입력 문자가 동일한 위치에 표시됩니다.

앞서 언급한 단계를 완료한 후, do 루프의 제어 표현식 (ch != str[i]) 이 평가됩니다. 잘못된 문자가 입력되면 ( chstr[i]와 같지 않을 때), do 루프가 다시 시작됩니다. 이 시점에서 프로그램은 다음 문자로 이동하지 않고 do ... while 루프 내의 관련 부분을 다시 실행합니다. 올바른 문자를 입력한 후, i의 값은 for 루프에 의해 증가하고, 프로그램은 다음 문자로 이동합니다. 모든 문자를 입력한 후, 프로그램은 플레이어가 소요한 시간을 표시합니다.

다음 명령을 사용하여 컴파일하고 실행합니다:

cd ~/project
gcc -o typing1a typing1a.c -lcurses
./typing1a
Typing Practice

속도를 향상시키기 위해 여러 번 연습할 수 있습니다. How do you do?를 연습하는 것이 지루하다면, 다른 문자열을 선택하여 연습할 수도 있습니다.

✨ 솔루션 확인 및 연습

입력된 문자 삭제

~/project 디렉토리로 이동하여 프로젝트 파일 typing1b.c를 생성합니다:

cd ~/project
touch typing1b.c

이제 프로그램을 살펴보겠습니다. 코드는 다음과 같습니다:

#include <time.h>
#include <stdio.h>
#include <string.h>
#include "getputch.h"

int main(void)
{
    int     i;
    char    *str = "How do you do?";    /* The string to be entered */
    int     len = strlen(str);          /* The number of characters in the string str */

    init_getputch();
    printf("Please type as shown.\n");

    for (i = 0; i < len; i++) {
        /* Display the characters after str[i] and return the cursor to the beginning */
        printf("%s \r", &str[i]);
        fflush(stdout);
        while (getch() != str[i])
            ;
    }

    term_getputch();
    return 0;
}

이 프로그램은 이전 프로그램과 약간 다릅니다. 올바른 문자를 입력할 때마다 문자가 사라지고 다음 문자가 앞으로 이동합니다. 마찬가지로, 플레이어가 올바른 키를 입력하지 않으면 프로그램은 다음 문자로 이동하지 않습니다. 플레이어가 모든 문자를 올바르게 입력하면 모든 문자가 사라지고 프로그램이 종료됩니다.

여기서 수행되는 작업이 이전 프로그램보다 더 "진보"했지만, 프로그램은 실제로 더 짧습니다. for 문의 본문은 두 개의 짧은 문장으로 구성됩니다.

  • 문장 printf("%s \r", &str[i]);에서 printf 함수에 전달된 &str[i]str[i]에 대한 포인터입니다. 변수 i의 값이 0이므로 포인터 &str[i]는 문자 'H'를 가리키며, 위 그림과 같이 화면에 str[0]부터 시작하는 문자열 How do you do?를 표시합니다. 그런 다음 프로그램은 이 문자열 바로 뒤에 공백 문자 및 캐리지 리턴 \r을 출력하고 커서를 줄의 시작 부분에 있는 'H' 위치로 되돌립니다.
  • 입력된 문자 ( getch 함수의 반환 값) 가 str[i]와 같지 않으면, 즉 입력 문자가 'H'가 아니면, while 문은 플레이어가 올바른 문자를 입력할 때까지 계속 루프를 반복하고, 이 시점에서 while 문이 종료됩니다.
  • 그런 다음 변수 i의 값은 for 문의 영향으로 1이 됩니다. 위 그림과 같이 문장 printf("%s \r", &str[i]);str[1]부터 시작하는 문자열 ow do you do?를 출력한 다음, 공백 문자와 캐리지 리턴을 출력하고 커서를 시작 부분에 있는 'o' 위치로 되돌립니다. 그 후, 후속 while 문의 효과로, 플레이어가 'o'를 올바르게 입력할 때까지 기다립니다.

다음 명령을 사용하여 컴파일하고 실행합니다:

cd ~/project
gcc -o typing1b typing1b.c -lcurses
./typing1a
Typing Practice
✨ 솔루션 확인 및 연습

여러 문자열 입력

다음으로, 이전 프로그램을 확장하여 플레이어가 여러 문자열을 입력하도록 연습할 수 있도록 하겠습니다.

~/project 디렉토리로 이동하여 typing2a.c라는 프로젝트 파일을 생성합니다:

cd ~/project
touch typing2a.c

이제 프로그램을 살펴보겠습니다. 코드는 다음과 같습니다:

#include <time.h>
#include <stdio.h>
#include <string.h>
#include "getputch.h"

#define QNO     12      /* Number of questions */

int main(void)
{
    char *str[QNO] = {"book",   "computer", "default",  "comfort",
                      "monday", "power",    "light",    "music",
                      "programming", "dog", "video",    "include"};
    int i, stage;

    init_getputch();
    printf("Start typing practice.\n");
    printf("Press the spacebar to begin.\n");
    while (getch() != ' ')          /* Wait until */
        ;                           /* the player presses the spacebar */

    for (stage = 0; stage < QNO; stage++) {
        int len = strlen(str[stage]);   /* Number of characters in string str[stage] */
        for (i = 0; i < len; i++) {
            /* Display the characters after str[stage][i] and return the cursor to the beginning */
            printf("%s \r", &str[stage][i]);

            fflush(stdout);
            while (getch() != str[stage][i])
                ;
        }
    }

    term_getputch();

    return 0;
}

이 프로그램에서 문자열을 입력한 후, 다음 문자열이 플레이어가 입력할 수 있도록 동일한 줄에 표시됩니다. 총 12 개의 문자열을 연습할 수 있습니다.

이 프로그램은 대부분 이전 프로그램을 기반으로 하지만 몇 가지 차이점이 있습니다:

  1. for 문이 중첩되었습니다.
  • 질문의 단어 수가 1 개에서 12 개로 변경되었으므로 외부 for 문이 추가되었습니다. 이 for 문은 변수 stage에 대해 0 부터 시작하여 QNO번 반복합니다. strlen(str[stage]) 뒤의 내부 for 루프는 이전 프로그램의 for 루프와 동일합니다.
  • 각 반복에 대해 입력할 문자열은 str[stage]입니다 (이전 프로그램의 str과 동일). 입력할 문자 수는 문자열에 따라 다르므로, strlen(str[stage]) 문은 질문에 사용된 문자열 str[stage]의 길이를 계산하여 변수 len에 저장합니다.
  1. 입력할 문자는 더 이상 str[i]가 아니라 str[stage][i]입니다.

내부 for 루프에서 입력할 문자는 str[stage][i]이며, 이는 이전 프로그램의 str[i]와 동일합니다.

다음 명령을 사용하여 컴파일하고 실행합니다:

cd ~/project
gcc -o typing2a typing2a.c -lcurses
./typing2a
Typing Practice
✨ 솔루션 확인 및 연습

문제 순서 섞기 (방법 1)

이전 프로그램으로 여러 번 연습한 후, 질문에 나타나는 다음 문자열이 자동으로 떠올라 훈련 효과가 약해집니다. 이제 질문 순서를 섞어보겠습니다.

~/project 디렉토리로 이동하여 typing2b.c 프로젝트 파일을 생성합니다:

cd ~/project
touch typing2b.c

이제 프로그램을 살펴보겠습니다. 코드는 다음과 같습니다:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "getputch.h"

#define QNO     12      /* Number of questions */

#define swap(type, x, y)    do { type t = x; x = y; y = t; } while (0)

int main(void)
{
    char *str[QNO] = {"book",   "computer", "default",  "comfort",
                      "monday", "power",    "light",    "music",
                      "programming", "dog", "video",    "include"};
    int i, stage;
    int qno[QNO];                   /* Order of questions */

    init_getputch();
    srand(time(NULL));              /* Set the seed for random numbers */
    for (i = 0; i < QNO; i++)
        qno[i] = i;
    for (i = QNO - 1; i > 0; i--) {
        int j = rand() % (i + 1);
        if (i != j)
            swap(int, qno[i], qno[j]);
 }
    printf("Start typing practice.\n");
    printf("Press the spacebar to begin.\n");
    while (getch() != ' ')          /* Wait until */
        ;                           /* the player presses the spacebar */

    for (stage = 0; stage < QNO; stage++) {
        int len = strlen(str[qno[stage]]); /* Number of characters in the string str[qno[stage]] */
        for (i = 0; i < len; i++) {
            /* Display the characters after str[qno[stage]][i] and return the cursor to the beginning */
            printf("%s \r", &str[qno[stage]][i]);
            fflush(stdout);
            while (getch() != str[qno[stage]][i])
                ;
        }
    }

    term_getputch();
    return 0;
}

질문 순서를 섞기 위해 프로그램은 int 유형의 요소와 크기 QNO (질문의 문자열 수, 즉 12) 를 가진 qno라는 새로운 배열을 도입합니다.

타이핑 연습을 시작하기 전에 처음 두 개의 for 루프는 배열 qno의 각 요소에 0, 1, 2, ..., 11 순서로 값을 할당하는 데 사용됩니다.

이전 프로그램과 유사하게, str[stage]의 모든 발생은 str[qno[stage]]로 대체되었습니다. 왜냐하면 이 프로그램의 각 루프에서 질문은 str[qno[stage]]를 기반으로 하기 때문입니다.

  • stage가 0 일 때; qno[0]의 값은 2 이므로 프로그램에서 표시되는 질문은 str[2]이며, 이는 default입니다.
  • stage가 1 일 때; qno[1]의 값은 1 이므로 프로그램에서 표시되는 질문은 str[1]이며, 이는 computer입니다.

이와 같이 12 개의 문자열로 연습한 후 프로그램이 종료됩니다.

다음 명령을 사용하여 컴파일하고 실행합니다:

cd ~/project
gcc -o typing2b typing2b.c -lcurses
./typing2b
Typing Practice
✨ 솔루션 확인 및 연습

문제 순서 섞기 (방법 2)

다음 프로그램은 배열을 사용하지 않고 다른 방법을 사용하여 질문 순서를 섞습니다. 이 프로그램은 이전 프로그램에 비해 변수가 적고 더 간결합니다.

~/project 디렉토리로 이동하여 typing2c.c 프로젝트 파일을 생성합니다:

cd ~/project
touch typing2c.c

이제 프로그램을 살펴보겠습니다. 코드는 다음과 같습니다:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "getputch.h"

#define QNO 12   /* Number of Questions */

#define swap(type, x, y)    do { type t = x; x = y; y = t; } while (0)

int main(void)
{
    char *str[QNO] = {"book",   "computer", "default",  "comfort",
                      "monday", "power",    "light",    "music",
                      "programming", "dog", "video",    "include"};
    int i, stage;

    init_getputch();
    srand(time(NULL));              /* Set random seed */

    for (i = QNO - 1; i > 0; i--) {  /* Shuffle the array str */
        int j = rand() % (i + 1);
        if (i != j)
            swap(char *, str[i], str[j]);
    }

    printf("Start Typing Practice.\n");
    printf("Press the spacebar to begin.\n");
    while (getch() != ' ')          /* Wait until */
        ;                           /* the player presses the spacebar */

    for (stage = 0; stage < QNO; stage++) {
        int len = strlen(str[stage]); /* Number of characters in the string str[stage] */
        for (i = 0; i < len; i++) {
            /* Display the characters after str[stage][i] and return the cursor to the beginning */
            printf("%s \r", &str[stage][i]);
            fflush(stdout);
            while (getch() != str[stage][i])
                ;
        }
    }

    term_getputch();
    return 0;
}

배열 str의 각 요소는 문자열 book, computer, default, ...를 가리킵니다. str[0]str[2]의 값을 교환한 후, str[0]default를 가리키고 str[2]book을 가리킵니다.

프로그램의 첫 번째 for 루프 (위의 코드) 는 포인터를 재정렬하는 역할을 하며, 이는 배열 str의 요소 값으로, 따라서 요소를 섞습니다. 교환되는 객체가 포인터이므로, 함수 매크로 swap에 할당된 첫 번째 인수는 char *입니다.

프로그램의 주요 부분에 있는 두 번째 for 루프에서 질문의 각 단계는 str[stage]로 반환됩니다 (Listing 8-4 에서 str[qno[stage]]이며, 더 복잡합니다). 이는 배열 str이 무작위로 재정렬되었고, str[0], str[1], ..., str[QNO-1]을 순서대로 출력함으로써 무작위 질문 순서를 얻기 때문입니다.

이 방법의 한 가지 단점은 단어의 순서가 섞이면 복원할 수 없다는 것입니다. 이 점에 유의하십시오.

다음 명령을 사용하여 컴파일하고 실행합니다:

cd ~/project
gcc -o typing2c typing2c.c -lcurses
./typing2c
Typing Practice
✨ 솔루션 확인 및 연습

키보드 레이아웃 연관 타이핑

다음으로, 플레이어가 키보드의 각 키 위치를 기억하면서 타이핑 연습을 할 수 있는 소프트웨어를 개발할 것입니다. 일반적인 타이핑 연습과 달리, 플레이어는 어떤 프롬프트 없이 문자를 입력해야 합니다. 또한, 키보드 레이아웃은 서로 다르며, 여기서는 아래 그림에 표시된 키보드 레이아웃을 참조로 사용합니다.

Typing Practice
Typing Practice

그림에 표시된 키보드 레이아웃에서 [Shift] 키를 누른 상태에서 [0] 키를 눌러도 정보가 입력되지 않습니다.

이 키보드의 레이아웃과 관련하여 다음 사항을 관찰할 수 있습니다.

  • 4 개의 키 레이어로 구성됩니다.
  • 각 레이어는 왼손 타격 키와 오른손 타격 키로 나뉘며, 왼손은 검은색 키를, 오른손은 파란색 키를 타격합니다.
  • [Shift] 키를 누르지 않아도 타격되는 키가 있고, [Shift] 키를 누른 상태에서 타격해야 하는 키가 있습니다.

레이어/손/[Shift] 키가 눌려졌는지 여부에 따라 분류된 다양한 세트를 "블록"이라고 하며, 전체 키보드는 총 4 × 2 × 2 = 16 개의 블록으로 구성됩니다.

예를 들어, 3 번째 레이어에서 [Shift] 키를 누른 상태에서 왼손 타격 키의 블록은 [A], [S], [D], [F], [G]입니다 (각각 새끼손가락, 약지, 중지, 검지, 검지로 처리).

이 훈련 소프트웨어에서 블록은 질문으로 제시되지만, 소프트웨어는 이 블록 내에서 하나의 문자를 숨기기 위해 "?"를 사용합니다. 예를 들어, 다음 질문의 경우 플레이어는 숨겨진 "?"를 대문자 D 와 연관시킨 다음 문자를 입력해야 합니다.

A S ? F G
✨ 솔루션 확인 및 연습

코드 및 실행 결과

~/project 디렉토리로 이동하여 typing3.c라는 프로젝트 파일을 생성합니다:

cd ~/project
touch typing3.c

위 지침에 따라 작성된 프로그램은 다음과 같습니다:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "getputch.h"

#define NO   30   /* Number of exercises */
#define KTYPE  16   /* Number of blocks */

int main(void)
{
    char *kstr[] = {"12345",  "67890-^\\",  /* Layer 1         */
                    "!\"#$%", "&'() =~|",   /* Layer 1 [Shift] */
                    "qwert",  "yuiop@[",    /* Layer 2         */
                    "QWERT",  "YUIOP`{",    /* Layer 2 [Shift] */
                    "asdfg",  "hjkl;:]",    /* Layer 3         */
                    "ASDFG",  "HJKL+*}",    /* Layer 3 [Shift] */
                    "zxcvb",  "nm,./\\",    /* Layer 4         */
                    "ZXCVB",  "NM<> _",     /* Layer 4 [Shift] */
                    };
    int i, stage;
    clock_t start, end;         /* Start and end times */

    init_getputch();
    srand(time(NULL));          /* Set the seed for random number generation */

    printf("Start typing association exercises.\n");
    printf("Please enter the hidden character indicated by '?'.\n");
    printf("Press the space key to start.\n");
    fflush(stdout);
    while (getch() != ' ')
        ;

    start = clock();            /* Start time */

    for (stage = 0; stage < NO; stage++) {
        int  k, p, key;
        char temp[10];

        do {
            k = rand() % KTYPE;
            p = rand() % strlen(kstr[k]);
            key = kstr[k][p];
        } while (key == ' ');

        strcpy(temp, kstr[k]);
        temp[p] = '?';
        printf("%s", temp);
        fflush(stdout);
        while (getch() != key)
            ;
        putchar('\n');
    }

    end = clock();              /* End time */
    printf("Time taken: %.1f seconds.\n", (double)(end - start) / CLOCKS_PER_SEC);

    term_getputch();
    return 0;
}

매크로 KTYPE은 블록 수를 나타내며, 값은 16 입니다. 배열 kstr은 각 블록의 문자로 구성된 문자열을 왼쪽에서 오른쪽으로 정렬하여 저장하는 데 사용됩니다.

훈련 목적상, 질문에는 문자 ?가 포함되지 않으므로, 선언된 블록의 마지막 문자열은 NM<>?_ 대신 NM<> _입니다 (프로그램이 공백 키를 사용하여 질문을 생성하지 않으므로 오류가 발생하지 않습니다).

키보드 레이아웃이 이 예제에 표시된 것과 다르면, kstr 배열의 선언을 적절하게 수정하십시오.

첫 번째 do while 루프는 질문을 생성하는 역할을 합니다.

  • 변수 k는 질문을 생성할 블록을 나타냅니다. 이 값은 kstr 배열의 인덱스에 해당하므로, 0 이상 KTYPE 미만의 난수로 설정됩니다.

    블록 수 KTYPE이 16 이므로, 생성된 난수는 0 에서 15 까지의 범위를 갖습니다.

  • 변수 p는 질문을 생성하기 위해 블록 내에서 숨겨야 하는 문자를 나타냅니다. 이 값은 블록 내에서 질문 생성에 사용되는 문자열의 인덱스에 해당하므로, 0 이상 블록 내 문자 수 미만의 난수로 설정됩니다.

    k가 0 이라고 가정하면, 블록은 5 개의 문자, 즉 '12345'로 구성되므로, p는 0 에서 4 까지의 난수로 설정됩니다. 또한, k가 3 이면, 블록은 8 개의 문자, 즉 '&'()=~|'로 구성되므로, p는 0 에서 7 까지의 난수로 설정됩니다.

  • 변수 key는 숨겨진 문자를 나타냅니다.

예를 들어, k가 0 이고 p가 2 이면, 블록 '12345'의 문자 '3'key입니다. 프로그램이 질문 생성에 사용해서는 안 되는 문자에 이미 공백 문자 ''를 할당했으므로, 숨겨진 문자 key가 공백 문자인 경우 do-while 루프를 사용하여 질문을 다시 생성합니다.

다음으로, strcpy 함수는 kstr[k]temp에 복사하고, temp[p]에 '?'를 할당합니다. 이렇게 하면 화면에 표시될 문자열 12?45가 생성됩니다.

프로그램이 문자열 temp를 표시하고 키보드에서 입력된 문자 key를 읽을 수 있다면, 올바르게 작동하는 것입니다. 이전 타이핑 연습 프로그램과 마찬가지로, 이 프로그램은 잘못 입력된 문자를 허용하지 않습니다. 30 번의 훈련 라운드 후, 프로그램은 실행을 종료합니다.

다음 명령을 사용하여 컴파일하고 실행합니다:

cd ~/project
gcc -o typing3 typing3.c -lcurses
./typing3
Start typing association exercises.
Please enter the hidden character indicated by '?'.
Press the space key to start.
AS?FG
?m,./\
67890-?\
?XCVB
zx?vb
!"?$%
ZXC?B
hjk?;:]
…(생략)…
✨ 솔루션 확인 및 연습

요약

이 프로젝트에서 C 프로그래밍 언어를 사용하여 타이핑 연습 프로그램을 만드는 방법을 배웠습니다. 이 타이핑 연습 프로그램은 코딩 또는 일반적인 의사 소통을 위해 사용자가 타이핑 기술을 향상시킬 수 있는 다재다능한 대화형 플랫폼을 제공합니다. 타이핑 속도와 정확성을 향상시키는 데 유용한 도구를 제공합니다.