728x90

C프로그램은 파일을 직접 다루지 않고 스트림(stream)을 다룬다. 스트림은 실제의 입력이나 출력이 맵핑된(mapped) 데이터의 이상화된 흐름이다.

서로다른 특성을 가진 여러 종류의 입력들이, 좀더 일관된 특성을 가진 스트림으로 표현된다는 것을 의미한다.

그렇게 되면, 파일을 여는 과정은 하나의 스트림을 그파일에 연결하는 과정이 된다. 읽기와 쓰기도 스트림을 통해 이루어진다.

 

컴퓨터의 운영체제는 각각의 파일이 어디에서 시작하고 어디에서 끝나는지 말해주는 어떤 방법이 필요하다. 파일의 끝을 탐지하는 한가지 방법은, 끝을 표시하는 특별한 문자를 파일안에 집어 넣는것이다.

 

C는 운영체제가 어떻게 파일끝을 실제로 탐지 하느냐에 관계없이, 파일의 끝에 도달했을 때 getchar()함수가 특별한 값을 리턴하게 함으로써 이 다양한 방법들을 처리한다. 이 특별한 값의 이름이 EOF(end of file)이다. 일반적으로 EOF는 stdio.h 파일에 다음과 같이 정의되어 있다.

#define EOF (-1)

 

입력과 출력은 함수, 데이터, 장치들과 관계를 맺는다.

 

프로그램이 파일을 다루는 방법은 두가지가 있다. 첫번째 방법은 파일을 열고, 파일을 닫고, 파일을 읽고, 파일에 쓰는 등의 작업을 할 수 있는 특별한 함수들을 명시적으로 사용하는 것이다.

두번쨰 방법은 키보드와 화면을 처리하도록 설계된 프로그램을 사용하되, 다른 채널을 사용하도록 입력과 출력을(예를 들면 파일로 부터 또는 파일로) 리디렉션 하는 것이다.

>>연산자는 이미 존재하는 파일의 끝에 데이터를 추가한다. pipe(|)는 한 프로그램의 출력을 두번째 프로그램의 입력으로 연결시킨다.

 

getchar()가 스페이스, 탭, 개행을 포함한 모든 문자를 읽는 반면에, scanf()는 수를 읽을 때 스페이스, 탭, 개행문자를 건너 뛰기 때문이다.

 

scanf()함수는 개행문자를 입력큐에 남겨둔다. scanf()함수는 성공적으로 읽은 항목의 수를 리턴한다.

 

C프로그램은 입력을, 들어오는 바이트들의 스트림으로 인식한다. getchar()함수는 각 바이트를 문자코드로 해석한다. scanf() 하무도 동일한 방식으로 입력을 인식하지만, 변환 지정자의 안내를 받아 문자입력을 수치값으로 변환할 수 있다.

728x90

'Programming > C' 카테고리의 다른 글

프로그래밍 연습 5  (0) 2019.05.09
C언어 공부 12  (0) 2019.05.08
C언어 공부 10  (0) 2019.05.08
C언어 공부 9  (0) 2019.05.08
프로그래밍연습 4  (0) 2019.05.06
728x90

continue 문을 만나면, 프로그램은 해당 루프 사이클의 나머지를 건너뛰고, 다음 루프사이클을 시작한다.

continue 문이 중첩된 구조 속에 들어있는 경우에는, 그 continue문을 포함하고 있는 내부 구조만 영향을 받는다.

 

break 문은, break가 들어 있는 그 루프로 부터 프로그램을 탈출시킨다. break문은 루프 바로 다음에 오는 문장을 곧장 실행을 옮긴다.

 

switch에서 break문은 switch다음에 오는 문장으로 건너 뛰게 만든다.

 

문자 입출력

입력 문자들을 즉시 에코 하는 것은 버퍼를 사용하지 않는 입력 또는 직접 입력의 한 사례이다. 반면에 입력 문자들을 뒤늦게 몰아서 에코하는 것은 버퍼(buffer)를 사용하는 입력의 한 사례이다.

 

버퍼를 사용하는 이유

1.문자들을 묶어서 전달하는 것이 하나씩 전달하는 것보다 시간을 적게 소모한다.

2. 잘못 타이핑 했을 때 키보드 기능을 사용하여 실수를 고칠 수 있다.

 

버퍼를 사용하지 않는 입력은 일부 대화식 프로그램에서 필요하다.

-> 게임에서 각 명령은 키를 누르는 즉시 실행 되어야 한다.

그러므로 버퍼를 사용하는 입력과 버퍼를 사용하지 않는 입력은 각각의 용도가 따로있다.

 

완전 버퍼링 입출력 : 가득 찼을때 버퍼가 비워진다. 일반적으로 파일입력에서 일어난다. 버퍼 크기는 시스템에 따라 다르지만, 512바이트와 4096바이트가 일반적인 값이다.

 

라인-버퍼링 입출력 : 개행 문자가 나타날 때마다 버퍼가 비워진다. 일반적으로 키보드 입력은 라인 버퍼링 입력이다.

 

 

IBM PC 호환기종의 PC는 C컴파일러들이 버퍼를 사용하지 않는 입력을 위해, conio.h 헤더파일이 지원하는 특별한 함수들의 계열을 제공한다. 여기에는 버퍼를 사용하지 않는 에코하는 입력을 위한 getche()와, 버퍼를 사용하지 않는 에코하지 않는 입력을 위한 getch()가 포함되어 있다.

 

에코하는 입력 : 사용자가 타이핑하는 문자가 화면에 보이는것

에코하지 않는 입력 : 키스트로크가 화면에 보이지 않는것

 

버퍼링에 대한 약간의 제어를 제공하는 함수 : setbuf(), setvbuf()

 

컴퓨터시스템들은 파일들을 저장하는 방식이 저마다 다르다. 어떤 시스템은 파일의 내용은 한곳에 저장하고, 그 파일에 대한 정보는 다른 곳에 저장한다.

어떤 시스템은 파일에 대한 정보를 그 파일 안에 저장한다.

 

텍스트를 다룰때, 어떤 시스템은 하나의 개행문자로 라인의 끝을 표시한다.

그런데 어떤 시스템은 캐리지 리턴 문자와 라인피드 문자의 조합으로 라인의 끝을 표기한다. 어떤 시스템은 파일의 크기를 정확한 바이트값으로 나타내지만, 어떤 시스템은 바이트들의 블록으로 나타낸다.

728x90

'Programming > C' 카테고리의 다른 글

C언어 공부 12  (0) 2019.05.08
C언어 공부 11  (0) 2019.05.08
C언어 공부 9  (0) 2019.05.08
프로그래밍연습 4  (0) 2019.05.06
프로그래밍 연습 3  (0) 2019.05.06
728x90

if와 else 사이에 하나 이상의 문장을 넣으려면, 단일블록을 만들기 위해 중괄호를 사용해야 한다.

ex)

if( x> 0)

{

   printf("x를 증가시킨다. : \n");

    x++

}

else

    printf("x <=0 \n");

 

getchar() : 단일 문자 입력함수

putchar() : 단일 문자 출력함수

 

getchar()와 putchar()는 scanf()와 printf()보다 빠르고 간결하다.

 

isalpha() : 전달인자가 알파벳 문자이면 0이아닌 값을 리턴한다.

 

tolower(ch);             //ch값 자체에 영향을 주지않는다.

ch = tolower(ch);       //ch를 소문자로 변환한다.

 

ctype.h 계열의 문자검사 함수들

isalnum() : 알파뉴메릭 문자(알파벳이나 숫자)

isalpha() : 알파벳

isblank() : 표준 블랭크 문자(스페이스, 수평탭, 개행)

isctrl() : ctrl+B와 같은, 제어문자

isdigit() : 숫자

isgraph() : 스페이스가 아닌 출력 가능한 문자

islower() : 영어 소문자

isprint() : 출력 가능한 문자

ispunct() : 구두점 문자(스페이스 또는 알파뉴메릭 문자가 아닌 출력가능)

isspace() : 화이트 스페이스 문자(스페이스, 개행, 폼피드, 캐리지리턴, 수직 탭, 기타 로케일 문자)

isupper() : 영어 대문자

isxdigit() : 16진수 숫자

 

ctype.h : 문자 매핑 함수들

tolower() : 전달인자가 대문자이면 소문자로 변환한 버전을 리턴한다. 전달인자가 소문자이면 원래의 전달인자를 그대로 리턴한다.

toupper() : 전달인자가 소문자이면 대문자로 변환한 버전을 리턴한다. 전달인자가 대문자이면 원래의 전달인자를 그대로 리턴한다.

 

정수곱 계산이 제곱근 계산보다 훨씬 빠르다

 

논리연산자                                       의미

&&                                         논리곱 AND

||                                             논리합 OR

!                                              논리부정 NOT

 

iso646.h 헤더파일을 사용하면

&&   대신   and

||      대신     or

!       대신      not

사용이 가능하다

 

범위를 검사하는데 && 연산자를 사용할 수 있다.

if(range >= 90 && range <= 100 )

if(90 <= range <= 100)           //이렇게 하지 마라

-> 에러를 찾아내지 못한다. if((90<= range) <= 100) ->이 된다. -> range가 90보다 크다면 -> if(1<=100)으로 항상 참이된다.

 

bool, true, false 를 쓰기 위해선 stdbool.h 헤더파일을 사용해야 한다.

 

문자열 입력에서 \n이나 ' '(스페이스)등을 필터링할때 ctype.h계열의 isspace()함수를 사용하는 것이 더 간단하다.

 

피연산자가 하나인 연산자를 단항연산자, 피연산자가 두개인 연산자를 이항 연산자라고 한다.

 

 

728x90

'Programming > C' 카테고리의 다른 글

C언어 공부 11  (0) 2019.05.08
C언어 공부 10  (0) 2019.05.08
프로그래밍연습 4  (0) 2019.05.06
프로그래밍 연습 3  (0) 2019.05.06
C언어 공부 8  (0) 2019.05.06
728x90

p218 - 1
p218-3
p219 -5
p219 - 7

728x90

'Programming > C' 카테고리의 다른 글

C언어 공부 10  (0) 2019.05.08
C언어 공부 9  (0) 2019.05.08
프로그래밍 연습 3  (0) 2019.05.06
C언어 공부 8  (0) 2019.05.06
c언어 공부 7  (0) 2019.05.06
728x90

p166-1
p166-4
p167 - 7

728x90

'Programming > C' 카테고리의 다른 글

C언어 공부 9  (0) 2019.05.08
프로그래밍연습 4  (0) 2019.05.06
C언어 공부 8  (0) 2019.05.06
c언어 공부 7  (0) 2019.05.06
C언어 공부 6  (0) 2019.05.05
728x90

while 문에서 한쌍의 중괄호로 while루프의 범위를 나타내고 있다.

 

C표준 수학 라이브러리가 거듭제곱을 연산하기 위한 pow()함수를 제공한다.

ex) pow(3.5,2.2) 는 3.5의 2.2제곱을 계산하여 리턴한다.

 

대입연산자 =

bow = 2002;

->bow라는 변수에 2002를 대입한다는 의미 이다.

 

i = i+1;

-> i라는 변수의 값에 1을 더하고 더한 값을 변수 i에 대입하라는 뜻이다.

 

데이터 객체 : 값을 저장하는데 사용할 수 있는 데이터 저장 영역

 

연산자 우선순위 ( 아래로 갈수록 낮아진다.)

         연산자                              결합방향

()                                             왼쪽에서 오른쪽으로

+- (단항연산자)                           오른쪽에서 왼쪽으로

*/                                             왼쪽에서 오른쪽으로

+- (이항연산자)                           왼쪽에서 오른쪽으로

=                                            오른쪽에서 왼쪽으로

 

typedef double real;

-> real을 double형의 또다른 이름으로 만든다. ex) real x = 5.2;

 

++shoe < 3.0 - 전위 연산자

shoe++ < 3.0 - 후위 연산자 비교한 후에 증가한다.

 

관계연산자

연산자             의미

<                 오른쪽이 왼쪽보다 작다

<=               오른쪽이 왼쪽보다 작거나 같다.

==               같다

>=              오른쪽이 왼쪽보다 크거나 같다.

>                오른쪽이 왼쪽보다 크다

!=               같지 않다.

 

*관계연산자는 대입연산자보다 우선순위가 높다.*

 

연산자(아래로 갈수록 우선순위가 낮아진다)            결합방향

( )                                                               왼쪽에서 오른쪽

- + ++ -- sizeof                                             오른쪽에서 왼쪽으로

* / %                                                           왼쪽에서 오른쪽으로

+ -                                                              왼쪽에서 오른쪽으로

<  >   <=   >=                                              왼쪽에서 오른쪽으로

==    !=                                                       왼쪽에서 오른쪽으로

=                                                                오른쪽에서 왼쪽으로

 

 

scanf()는 화이트 스페이스를 건너뛴다.

입력할 때 개행과 스페이스를 혼합하여 입력하기 가능

 

 

728x90

'Programming > C' 카테고리의 다른 글

프로그래밍연습 4  (0) 2019.05.06
프로그래밍 연습 3  (0) 2019.05.06
c언어 공부 7  (0) 2019.05.06
C언어 공부 6  (0) 2019.05.05
C언어 공부 5  (0) 2019.04.28
728x90

printf() 플래그

- : 항목이 왼쪽 정렬로 출력된다. 즉 필드의 왼쪽 부터 출력이 시작된다. ex)%-20s

+ : 부호있는 수를 출력할 때, 양수이면 +, 음수이면 - 를 붙인다.  ex)%+6.2f

스페이스 : 부호 있는 수를 출력 할 때, 양수이면 부호없이 스페이스를 하나 붙이고, 음수이면 -를 붙인다. + 플래그는 스페이스를 무시한다. ex) % 6.2f

# : 변환 지정에 대응하는 형식을 사용한다. %o의 경우에는 하나의 0을 앞에 붙인다. %x와 %X의 경우 0x 와 0X를 각각 붙인다.    ex) %#o    ,   %#8.0f   %+#10.3E

0 : 필드 너비에서 남는 공간을 스페이스 대신 0으로 채운다.   ex)%010d,   %08.3f

 

printf()함수도 리턴값을 가진다.

1. 정보를 출력하는 것과 어떤값을 변수에 대입한다.

2. 스페이스와 눈에 보이지 않는 개행문자까지 카운트하여 출력된 모든 문자들의 개수를 반환한다.

 

scanf()에 대한 C 변환 지정자

%c : 입력을 문자로 해석한다. 

%d : 입력을 10진 정수로 해석한다.

%e, %f, %g, %a : 입력을 부동소수점 수로 해석한다.

%E, %F, %G, %A : 입력을 부동소수점 수로 해석한다.

%i : 입력을 10진 정수로 해석한다.

%o : 입력을 8진 정수로 해석한다.

%s : 입력을 문자열로 해석한다. 다음 번 화이트 스페이스 앞까지의 입력

%u : 부호없는 10진 정수로 해석한다.

%p : 입력을 포인터(주소)로 해석한다.

%x, %X : 입력을 16진 정수로 해석한다.

 

scanf()에 대한 변환 변경자

* : 지정을 무시한다. scanf()가 그에 해당하는 입력을 건너뛴다. ex) "%*d"

자리수 : 최대 필드 너비. 입력이 최대 필드 너비에 도달하거나, 첫번쨰 화이트 스페이스를 만나면 중지된다. ex) " %10s"

hh : 하나의 정수를 signed char형 또는 unsigned char 형으로 읽는다. ex) " %hhd"  "%hhu"
ll : 하나의 정수를 long long 형 또는 unsigned long long 형으로 읽는다. ex) "%lld", "%llu"

h,l,L :

%hd, %hi 는 short int 형 저장

%ho, %hx, %hu : unsigned int

%ld, %li 는 그값이 long형으로 저장

%lo, %lx, %lu는 그 값이 unsigned long

%le, %lf, %lg는 double 형 저장

%Le, %Lf, %Lg 는 long double로 저장

위와같은 변경자들이 없으면 d,i,o,x는 int형을 나타내고, e,f,g는 float 형을 나타낸다.

j : 정수형 지정자가 뒤에 붙으면 intmax_t형 또는 uintmax_t형     ex)"%jd", %ju"

z : 정수형 지정자가 뒤에 붙으면 sizeof가 리턴하는 데이터형    ex)"%zd", %zo"

t : 두 포인터간의 차이     ex)"%td", "%tx"

728x90

'Programming > C' 카테고리의 다른 글

프로그래밍 연습 3  (0) 2019.05.06
C언어 공부 8  (0) 2019.05.06
C언어 공부 6  (0) 2019.05.05
C언어 공부 5  (0) 2019.04.28
프로그래밍 연습 2  (0) 2019.04.28
728x90

전처리기

#define

 

상수 이름은 대문자를 사용하는 것이 좋다.

또한 상수라는 것을 나타내기 위해 C_ 또는 K_를 붙이는 것이다.

 

limits.h에 정의 되어있는 일부 기호 상수들

CHAR_BIT : char형의 비트수

CHAR_MAX : char형 최대값

CHAR_MIN : char형 최소값

SCHAR_MAX : signed char형 최대값

SCHAR_MIN : signed char형 최소값

UCHAR_MAX : unsigned char형 최대값

SHRT_MAX : short형 최대값

SHRT_MIN : short형 최소값

USHRT_MAX : unsigned short형 최대값

INT_MAX : int형 최대값

INT_MIN : int형 최소값

UINT_MAX : unsigned int형 최대값

LONG_MAX, LONG_MIN, ULONG_MAX, LLONG_MAX, LLONG_MIN, ULLONG_MAX

 

float.h에 정의되어 있는 기호 상수들

FLT_MANT_DIG : float형의 가수부 비트수

FLT_DIG : float형의 소수부 최소 유효 자릿수

FLT_MIN_10_EXP : float형의 최대 유효숫자를 가진 최소 10진 음의 지수

FLT_MAX_10_EXP : float형의 최대 10진 양의지수

FLT_MAX : float형의 양의 최대값

FLT_EPSILON : 1.00과 최소한1.00 보다 큰 float형 값의 차

 

변환지정자

%a : 부동소수점수, 16진수

%A : 부동소수점 수, 16진수

%c : 단일문자

%d : 부호있는 10진 정수

%e : 부동소수점 수, e -표기

%E : 부동소수점 수 e - 표기

%f : 부동소수점 수, 10진 표기

%g : 값에 따라 %f나 %e 사용, 지수부가 -4보다 작거나, 정밀도 보다 크거나 같으면 %e사용

%G : 값에 따라 %f나 %e 사용, 지수부가 -4보다 작거나, 정밀도 보다 크거나 같으면 %e사용

%i : 부호있는 10진 정수 (%d와 같다)

%o : 부호없는 8진 정수

%p : 포인터

%s : 문자, 문자열

%u : 부호없는 10진 정수

%x : 부호없는 16진 정수, 16진 숫자 of 사용

%X : 부호없는 16진 정수, 16진 숫자 OF 사용

%% : 퍼센트 기호 출력

 

변경자

숫자 : 최소 필드 너비 ex)%4d

.숫자 : 정밀도 - 정수형의 경우 최소자릿수를 나타내며 최소 자릿수를 맞추기 위해 필요하다면 앞에 여분의 0을 붙인다.

-> %e, %E, %f - 소수점 아래에 출력될 자릿수

 %s 포맷 지정자의 경우 - 출력될 최대 문자수

ex) %5.2f  :  float형 값을 필드너비 5에 소수점아래 두자리까지 출력한다.

j : intmax_t or uintmax_t형 값을 나타냄  ex) %jd, %8jx

l : long int or unsigned long int 값을 나타냄 ex) %ld, %8lu

ll : long long int or unsigned long long int ex) %lld, %8llu

L : %Lf, %10.4Le - Long double 형 값을 나타냄

t : ptrdiff_t 형 값을 나타낸다. 두포인터 사이의 차에 대응하는 데이터형 ex) %td, %12ti

z : size_t형 값을 나타낸다. ex)%zd, %12zx

728x90

'Programming > C' 카테고리의 다른 글

C언어 공부 8  (0) 2019.05.06
c언어 공부 7  (0) 2019.05.06
C언어 공부 5  (0) 2019.04.28
프로그래밍 연습 2  (0) 2019.04.28
C언어 공부 4  (0) 2019.04.28

+ Recent posts