본문 바로가기

c언어22

scanf("%c")의 문제점 scanf("%c", &c); 위와 같은 코드로 하나의 문자를 입력받으려고 할 때, 종종 문제가 생기곤 한다. 정확한 원리는 모르겠지만 scanf("%c", c); 보다 아래에 있는 코드가 먼저 실행되는 것처럼 보이는 경우가 발생한다. 키보드의 입력은 모두 입력버퍼 라는 곳에 담기게 되는데, a를 입력하고 엔터키('\n')를 누르면 'a'라는 문자와 '\n'라는 문자 모두 입력 버퍼에 들어가게 된다. scanf는 입력 버퍼에 있는 두 문자를 모두 읽어버리는데 이게 문제의 원인이다. 반복문 안에 scanf("%c")가 있으면 처음에는 a를 받고, 그 다음 반복에서 자동으로 '\n'을 받게된다. 사용자는 아직 두번째 반복에서 문자를 입력하지 않았다고 생각하지만 컴퓨터는 개행문자를 받아서 반복문을 한 번 더 .. 2023. 1. 15.
sscanf와 sprintf sscanf(s, "%d", &value); >> 문자열 s를 %d(int)형식으로 value라는 변수에 저장한다. (문자열 -> 숫자) char s[] = "100"; int value; sscanf(s, "%d", &value); //s에 있는 문자열을 value에 %d 형식으로 저장. printf("%d", value); //정수 100이 출력된다. spirntf(s, "%d", value); >> 변수 value에 있는 %d 형식의 값을 문자 배열 s에 문자열 형태로 저장한다. (숫자 -> 문자열) char s[] = "100"; int value; sscanf(s, "%d", &value); value++; sprintf(s, "%d", value); //value에 있는 %d 형식을 s에 문자.. 2023. 1. 11.
C 문자(열) 처리 라이브러리 이 함수들은 를 include 해야 한다. isalpha(c) >> c가 알파벳인가? isupper(c) >> c가 대문자인가? islower(c) >> c가 소문자인가? isdigit(c) >> c가 숫자인가? isalnum(c) >> c가 숫자 또는 알파벳인가? isxdigit(c) >> c가 16진수의 숫자인가? (0 ~ 9, A~F, a~ f) isspace(c) >> c가 공백문자인가? (' ', '\n', '\t', '\v', '\r') ispunct(c) >> c가 구두점(마침표 또는 쉼표)인가? isprint(c) >> c가 출력 가능한 문자인가? iscntrl(c) >> c가 제어 문자인가? isascii(c) >> c가 아스키 코드인가? 위 함수들은 참이면 0이 아닌 값을 반환하고 거짓.. 2023. 1. 10.
C 문자열 입출력 라이브러리 # '문자' 입출력 라이브러리 ▪ getchar >> 하나의 문자를 읽어서 반환한다. (버퍼 사용) ▪ _getch >> 일반적으로 문자를 입력하면 화면에 내가 입력한 문자를 출력해주는데 (> _getch에 에코 기능이 추가된 함수. 다른 차이점은 없다. ▪ putchar(c) >> 변수 c에 저장된 문자를 출력한다. (버퍼 사용) ▪ _putch >> 변수 c에 저장된 문자를 출력한다.(버퍼를 사용하지 않는다) + _getch와 _putch는 를 include 해야 사용할 수 있다. 버퍼를 사용하는 함수는 문자를 입력하고 최종적으로 엔터를 눌러야 입력이 이루어지는데, 버퍼를 사용하지 않는 함수는 문자를 하나 입력하는 순간(키보드를 하나 누르는 순간) 바로 입력이 이루어진다. 따라서 전자는 수정이 가능하.. 2023. 1. 9.