본문 바로가기
C/C

C 언어 적응 [4주차] (표준입출력함수)

by DeathStar183 2022. 3. 28.

알바 때문에 죽을꺼같아...

 

지난주 내용들

 

C 프로그램은 함수(function)의 집합

함수란 특정한 작업을 하는 독립적인 단위 모듈

함수에 입력시키는 것을 argument, argument를 받을 변수를 매개변수(parameter)

함수가 돌려주는 결과 값을 리턴값(return value)

 

프로그래머를 위해서 이미 만들어져 있는 printf()와 같은 표준 라이브러리 함수는 이미 만들어져 있으므로 바로 사용하면 되지만 사용하기 전에 반드시 선언을 해야 함 

직접 선언을 할 수도 있지만 이 함수가 선언되어 있는 stdio.h라는 파일(표준 헤더 파일)을 프로그램에 포함시키는 방법을 더 많이 사용

 

계속 사용될 printf() 도움말 참고하기 

http://www.cplusplus.com/reference/clibrary/

 

저번주의 배웠던 리티럴의 대표적인 목록들이니 참고하시면 도움이 되실껍니다 ^^

 

저번에 숫자들을 8,10,16진수를 이용해봤으니 이번엔 서로 다른 진수가 출력 되게끔 해볼시간입니다!

 

 

4-1. 특정 숫자를 8진수와 16진수로 표현하기

10진수를 16진수로 변환할때 %x를 (hexa), 8진수로는 %o (octo)를 이용한다.

 

 

4-2. printf() 함수 사용 예시

7. -부호는 왼쪽 정렬을 의미하고, +는 오른쪽 정렬이다.

9. %05d는 5칸으로 표시하지만, 빈자리는 0으로 채워서 출력

 

 

4-3. printf()의 %f, %e, %g

4. f는 실수를 소수점 6자리까지 출력

5. e는 실수를 사진과 같은 지수형태로 출력

6. g는 위 둘중 자리를 덜차지하는 방식으로 출력

7. 전체자리 (소수점을 포함해 출력) 수가 5, 소수점 이하 자리수 1, 즉 소수점 2번째 자리에서 반올림

8. 소수점 이하 2자리수까지, 즉 3번째 자리에서 반올림해서 출력

 

 

4-4. printf() 함수로 문자 출력

 

5. 4개의 %c자리에 각각의 문자와 콤마가 출력됨, 문자 상수는 작은 따옴표로 감싸서 사용할것

 

4-5. 위 함수를 이용해서 문자열 출력하기

4. 2개 이상의 문자의 집합인 문자열 상수는 양쪽에 큰 따옴표로 감싸서 사용, 문자 상수와 혼동 주의

 

]

표준 입출력 함수 scanf()

"scan formatted"의 의미를 갖는 scanf()함수는 지정된 형식에 따라 키보드로부터 데이터를 입력 받아 메모리에 저장하는 함수

 

■ %다음에 *를 쓰면 입력한 내용을 버리라는 것임 

scanf("%*d%d",&num); 

 

두 개의 수를 입력받는데 첫 번째 입력받은 수는 무시하고 두 번째 입력받은 수를 num에 저장

데이터들을 키보드가 아닌 파일로부터 입력 받는 경우 특정한 부분만 입력받기 위해서 사용

 

■ [폭]부분은 정수값을 지정하여 읽어들일 최대 길이를 지정

 

%3d로 입력받으면 입력받는 숫자 중 처음 3개만 입력받음

12345를 입력하면 123만 받아들임

 

■ [크기]부분

 

h는 정수형이 short형

l은 정수형은 long형, 실수형은 double형

L은 실수형이 long double형

 

 

4-6. 숫자 하나를 입력받아 출력

scanf()를 이용해 키보드로 숫자 하나를 입력할수 있는데, 거기에 숫자를 적으면 된다.

하지만... 이렇게는 실행이 되질 않는다.

 

실행하기 위해서는 맨 윗줄에 추가적으로 코드를 작성해야한다.

이렇게.

#define _CRT_SECURE_NO_WARNINGS 를 입력해 사용하면 해당 코드가 작동한다.

입력하지 않을경우 error C4996: This Function or variable may be unsafe Consider using... 뭐 길게 나오는데

그냥 사용시 이 변수나 함수가 안전하지 않다는 의미로 작동하지 못하게 프로그램 차원에서 막는다.

(사용하고 싶다면 위 해당코드를 입력하라고 영문으로 나옴)

 

해당 코드를 입력하면 그런 위험성을 무시하고 사용한다는 의미로 해석할수 있다.

(어차피 자신의 운영체제내에서 사용할것이기에 큰 의미나 문제는 없다.)

 

 

4-7. 숫자 두개를 입력받아 더하는 함수 구현하기

5. 키보드로 입력받은 수를 저장하기 위한 변수 2개 선언

8. 10진수 (%d) 2개를 입력받아 각각긔 변수에 (num1, num2) 저장.

8-2. 공백이 아닌 쉼표로 붙여서 쓰면 쉼표는 문자로 인식하여 오류가 난다 (시도 금지)

 

 

4-8. 문자 상수 두개 입력하여 출력하기

7. 입력시에는 모르지만, 공백이나 엔터도 여기선 엄연히 하나의 문자로 인식함 (주의)

(스페이스로 구분하여 입력하였기에 이런 오류가 나게 됨, 그게 아니어도 엔터를 치기에 똑같음)

8. 해결하기 위해서 주석부분처럼 공백을 한칸 넣어주면 해결된다.

 

 

4-9. 문자 세개 입력받아서 출력하기 (비추천)

여기선 두개만 입력해서 설명합니다.

 

아까 위해서 말했듯 공백이나 엔터도 하나의 문자로 인식해서 처리하기에

문자 상수를 입력하고 엔터를 누르면 문자 상수와,엔터키가 들어온것으로 인식해 2개가 한거번에 넘어가게 된다.

(그로 인해서 출력하면 a만 출력되고 엔터도 출력되어서 [표시는 안되지만], 하나만 있는걸로 보임)

 

물론 그걸 해결할 방법이 있긴하다.

 

 

4-10. scanf() + getchar()

10. scanf()함수를 연속 사용해 문자를 입력 받으려면 getchar()로 엔터 입력을 제거함

(다른 말로는 버퍼를 비운다고 한다.)

 

물론 굳이 getchar()를 쓰지 않더라도 저렇게 입력할수는 있다.

 

 

4-10-2. scanf()로 3개 문자 입력받기

9. 단, 구분을 할수있게끔 스페이스로 구분하여 입력하게끔 해야한다

 

 

 

4-11. 문자열을 입력받아서 출력 

8. scanf()함수의 %s를 이용해 문자열을 입력받음.

만약에 공백이 있을경우 (첫공백한정) 공백 있기전의 문자만 출력 (홍 길동이라 쓰면 홍만 출력)

입력하는 문자열의 길이가 9바이트 이상이면 오류가 나므로 주의 (이는 배열의 숫자를 높이면 해결)

 

 

4-12. putchar() 함수의 사용법

5. putchar() 함수는 매개변수로 지정한 문자나 숫자를 문자로 출력

6. 문자 A 자체 출력

7. 아스키 코드값 65에 해당하는 문자 A를 출력

 

 

4-13. gets_s(), puts() 사용법

6. puts()는 문자열 전용 출력 함수 printf()와 달리 출력하려는 문자열 마지막에 자동으로 개행이 됨.

(puts()에서는 문자열 끝에 있는 NULL문자가 자동으로 개행되기 때문[\0이 \n]으로 변경됨)

 

7. gets_s는 문자열 전용 입력 함수, 엔터키를 (\n) 누를때 까지 문자열을 입력 받음. (공백이 있어도 다 입력받음)

입력된 문자열에는 \n이 포함되지 않으며 대신 문자열의 끝을 의미하는 \0이 자동으로 추가됨

문자열의 길이가 9바이트 이상일경우 오류가 나므로 주의

 

10. puts() 함수로 배열에 저장된 문자열을 출력하기 위해서 배열의 이름만 쓰면됨 [name]

 

 

4-14. getchar(), _getch(), _getche()

getchar() 함수는 키보드로 문자를 입력하고 엔터키를 누를때 첫클자만 입력됨

엔터키를 누르기전에 수정할수 있으며, 엔터를 누른후 첫글자가 무엇인지 보여줌

 

_getch() 함수는 키보드로 처음 입력하는 한 글자만 즉시 받아들이고,

입력한키가 무엇인지는 화면에 표시되지 않음. (_getche와 반대)

 

_getche() 함수는 키보드로 처음 입력하는 한 글자만 즉시 받아들이며,

입력한키가 무엇인지 화면 표시되어 알수있음. (_getch와 반대)

 

◆오늘의 문제 : 비어있는 곳을 채워넣어 프로그램을 실행시키세요!

 

지난주의 문제의 해답

해당 내용은 인덕대학교 2021년도 1학기 C프로그래밍 한성현 교수님 강좌에서 발췌한 내용입니다.

강좌 내용을 원저작자 허락없이 무단 이용시, 처벌의 대상이 될수 있습니다.

 

댓글