C언어/참고서: C언어 콘서트

C언어 50차시 문자열, string, 초기화, getchar(), _getch(), putchar(), _putch(), %s

Olivia-BlackCherry 2023. 4. 7. 14:09

목차

    1. 문자열 string

    문자들의 모임으로,  " " 큰 따옴표를 사용해 표현한다.

    문자열은 변경이 불가능하기 때문에 문자열 상수라고 말한다. 

     

     

    2. 문자열은 '배열'에 저장

    char str[7] ="olivia";

     

     

    3. 배열 사이즈 => 문자의 개수 +1

    끝나는 지점을 표시해주기 위해 마지막 문자는 NULL 문자가 들어간다. 

     

    예를 들어, 배열 사이즈가 문자의 개수보다 컸을 때 

    문자열을 제외한 나머지 값들은 쓰레기 값이 들어가는데

    컴퓨터는 끝나는 지점이 무엇인지 모르기 때문에 쓰레기값도 유의미한 처리를 하려고 한다. 

    따라서, 끝나는 지점을 표시하기 위해 마지막 자리에 \0을 넣는다. 

    아스키코드에서 NULL 문자는 \0이다. 

     

     

    4. 문자열 초기화

    1) char str[7] ={'o', 'l', 'i', 'v', 'i', 'a', '\0'};

    배열 초기화하듯 중괄호 넣고 하고, 마지막에는 \0 문자 넣기

     

    2) char str[7] ="olivia";

    문자열 이용하여 문자형 배열을 초기화

     

    3) char str[] ="olivia";

    배열의 크기를 지정하지 않으면, 컴파일러가 자동으로 문자 개수를 맞추어 계산함. 

    위의 경우 사이즈는 7로 자동배정 된다. 

     

     

    5. 문자열 형식지정자 %s

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main()
    {	
    	char str1[3] = "my";
    	char str2[5] = { 'n','a','m','e','\0' };
    	char str3[] = "is Olivia";
    
    	printf("%s %s %s", str1, str2, str3);
    	return 0;
    }

    목차

      >>my name is Olivia

       

       

      6. 중간 문자열 변경하기.

      #define _CRT_SECURE_NO_WARNINGS
      #include <stdio.h>
      int main()
      {	
      	char str1[3] = "my";
      	char str2[5] = { 'n','a','m','e','\0' };
      	char str3[] = "is Olivia";
      
      	str1[0] = 'M';
      
      	printf("%s %s %s", str1, str2, str3);
      	return 0;
      }

      >>My name is Olivia

       

       

      7. 연습문제 - 문자열 길이 구하기

      #define _CRT_SECURE_NO_WARNINGS
      #include <stdio.h>
      int main()
      {	
      	char str1[3] = "my";
      	char str2[5] = { 'n','a','m','e','\0' };
      	char str3[] = "is Olivia";
      
      	int i = 0;
      	while (str2[i] != 0) {
      		i++;
      	}
      	printf("%d", i);
      	return 0;
      }

      >>4

       

       

      8. 문자 입력 함수

      8-0 버퍼란?

      버퍼는 컴퓨터 분야에서 많이 사용되는 용어로, 데이터를 일시적으로 저장하거나 처리를 지연시키는 데 사용되는 임시적인 공간을 의미합니다.

      일반적으로 버퍼는 데이터를 한 곳에서 다른 곳으로 전송하는 동안 데이터를 일시적으로 저장하여 데이터 전송 속도를 조절하거나 데이터 처리의 효율성을 높이는 데 사용됩니다. 버퍼는 데이터를 임시로 저장하고 처리를 지연시켜 다른 시스템이나 장치와의 데이터 흐름을 조절하여 데이터 전송의 안정성과 성능을 향상시킵니다.

      버퍼는 다양한 형태로 사용될 수 있습니다. 예를 들어, 컴퓨터의 메모리에 할당된 버퍼는 CPU와 입출력 장치 간의 데이터 전송을 조절하거나, 파일 시스템에서 파일의 데이터를 일시적으로 저장하여 디스크 I/O의 효율성을 높이는 데 사용될 수 있습니다. 또한 네트워크 통신에서도 버퍼는 데이터 패킷을 일시적으로 저장하여 네트워크 전송의 안정성을 향상시키는 데 사용될 수 있습니다.

      버퍼는 컴퓨터 시스템에서 중요한 역할을 담당하며, 데이터의 안정성과 처리 속도를 향상시키는 데에 도움을 줍니다.

       

       

      8-1 getchar() 

      하나의 문자를 받아서 반환.

      버퍼 사용하여 엔터키를 누르기 전까지 글자들을 프로그램으로 보내지 않는다.

      또한 엔터키도 줄바꿈 문자\n로 프로그램에 전달된다.

      그래서 때로는 원치않은 오류를 발생하기도 한다.

       

      또한 getchar() 함수는 <stdio.h> 헤더 파일에 정의되어 있으며, 표준 입력 스트림(stdin)에서 문자를 입력받습니다. 즉, 키보드로부터 입력을 받아 프로그램에서 문자를 처리할 수 있습니다. getchar()는 입력 버퍼에 입력된 문자를 읽어오고, Enter 키(개행 문자)를 입력받을 때까지 기다리며, 입력 버퍼에서 한 문자씩 가져옵니다.

       

      주의사항:
      getchar() 함수는 입력 버퍼에서 문자를 가져오기 때문에, 사용자가 입력한 문자를 프로그램이 실제로 처리하기 전에 Enter 키를 눌러야 합니다.
      getchar()는 문자 하나만을 입력 받기 때문에, 문자열을 입력받으려면 반복문을 사용하여 여러 번 호출해야 합니다.
      입력 버퍼에 입력된 문자가 개행 문자인 경우, 버퍼에 남아있는 개행 문자를 다음 입력 함수에서 처리해야 합니다.

      #include <stdio.h>
      
      int main() {
          char ch;
          printf("문자를 입력하세요: ");
          ch = getchar(); // 표준 입력 스트림에서 문자를 입력받음
          printf("입력한 문자는: %c\n", ch);
          return 0;
      }

       

      8-2 _getch()

      하나의 문자를 받아서 반환.

      버퍼 사용 X.

      버퍼를 사용하지 않기 때문에 사용자가 키를 누르면 바로 프로그램으로 전달한다.

       

      _getch(): _getch() 함수는 <conio.h> 헤더 파일에 정의되어 있으며, 키보드로부터 문자를 입력받습니다. _getch()는 키보드로부터 입력된 문자를 즉시 읽어와 입력 버퍼를 거치지 않고 처리합니다. 따라서 Enter 키를 누르지 않아도 바로 문자를 입력받을 수 있습니다.

       

      주의사항:
      _getch()는 표준 C 라이브러리에 포함되어 있지 않아, 이식성(portability)에 제한이 있을 수 있습니다. 따라서 특정 컴파일러나 운영 체제에서만 사용 가능할 수 있습니다.
      _getch()는 입력 버퍼를 거치지 않고 바로 입력을 처리하기 때문에, 입력의 뒷자리에 개행 문자나 다른 입력이 남아있지 않도록 주의해야 합니다.
      _getch()는 사용자의 입력에 대한 에코(echo)를 보여주지 않기 때문에, 화면에 입력된 문자가 표시되지 않습니다. 사용자에게 입력을 확인받는 등의 추가적인 처리를 직접 구현해야 합니다.

      #include <stdio.h>
      #include <conio.h>
      
      int main() {
          char ch;
          printf("문자를 입력하세요: ");
          ch = _getch(); // 키보드로부터 문자를 바로 입력받음
          printf("입력한 문자는: %c\n", ch);
          return 0;
      }

       

       

      9. 출력함수 putchar(), putch()

      두 함수 모두 문자를 출력할 때 사용하는 함수이다. 

      하지만 두 함수는 차이가 있다. 

      따라서, putchar() 함수는 표준 C 라이브러리에 포함되어 있어 이식성이 높고, 일반적인 C 프로그래밍에서 사용하기에 적합합니다. 반면에 putch() 함수는 특정 컴파일러와 운영 체제에서만 사용 가능하며, 특정한 환경에서의 특수한 용도로 사용될 수 있습니다. 따라서, 프로그램을 개발할 때는 putchar() 함수를 우선적으로 사용하는 것이 권장됩니다.

       

       

      <getchar() 예시코드>

      #include <stdio.h>
      
      int main() {
          char ch = 'A';
      
          // 문자 출력
          putchar(ch);
      
          printf("\n\n");
      
          // 반환 값으로 문자 또는 EOF를 사용한 에러 처리
          int result = putchar(ch);
          if (result == EOF) {
              printf("Error occurred during putchar()\n");
          }
      
          return 0;
      }

      >>A

       

      A

       

       

      <_getch() 예시코드>

      #include <stdio.h>
      #include <conio.h>
      
      int main() {
          char ch = 'A';
      
          // 문자 출력
          _putch(ch);
          printf("\n\n");
      
          // 반환 값으로 출력한 문자의 ASCII 값 사용
          int result = _putch(ch);
          printf("\n\n");
      
          // 반환 값 출력
          printf("Returned value: %d\n", result);
          printf("Returned value: %c\n", result);
      
          return 0;
      }

      >>A

      A

      Returned value: 65
      Returned value: A