CreamPuff's HACK LAB
[코딩 연습/C] 3일차 (011~020) 본문
코딩 연습 출처 : https://cafe.naver.com/funcc
011. printf 출력 형식 : 보기 좋게 출력하기
\t | 탭 키(보통 8칸)만큼 띄우고 출력 |
%-xd | x칸을 잡고 좌측(-) 정렬 |
%yd | y칸을 잡고 우측(+) 정렬 |
012. 정수 두 개 입출력(1)
"(정수를 입력 받을 때에는) 엔터, 탭, 스페이스 등으로 두 값을 구분한다."
013. 정수 두 개 입출력(2)
* 보안상의 문제로 scanf함수보다 scanf_s함수를 사용하는것이 안전하다.
014. 실수 입출력
"정수, 실수를 입력 받을 때는 변수 앞에 &를 붙인다."
015. 문자 입출력(1)
"문자 입력은 scanf(%c), getchar 두 가지 방식이 있다."
scanf | getchar |
scanf("%c", &character); | character = getchar(); |
016. 문자 입출력(2)
"scanf_s함수는 scanf함수와 다르게 문자와 문자열 입력시에
저장공간에 저장가능한 문자의 갯수를 같이 입력해줘야 한다."
scanf_s("%c%c", &a, &b, sizeof(a), sizeof(b));
요렇게 코딩해야된다는 말인데..
Dev C++에서는..
요렇게 아무 것도 출력이 되지않는다..
(심지어 이후 입력한 puts도 출력되지 않는다. 오류 발생 이후에는 NULL문자 발생하는 것인가?)
컴파일러 종류에 따른 결과값의 차이인듯 하다.
혹시 몰라서 컴파일러 버전 찍어둠
TDM-GCC 4.9.2 64-bit Release
일단은 넘어가자.
017. 문자 여러 개 입출력(3)_문제 해결
: 키보드 버퍼지우기
1) "fflush(stdin) 입력"
x를 입력하고 엔터를 치면 엔터값이 어딘가에 저장된다.
이것을 비워야!
이후에 입력되는 y값을 제대로 가져올 수 있다.
위와 같이 fflush(stdin);을 주석 처리하여
키보드 버퍼를 지우지 않으면
x입력 후 엔터를 입력 시
두 번째 문자 입력 단계에서 한 칸에 무언가가 입력(엔터값으로 추정)된 후
마지막 결과 출력 값이 바로 나온다.
2) "%*c 추가 입력"
fflush(stdin)을 이용하지 않고
위와 같이 %*c를 추가 입력하여도 된다.
(어떤 의미인지는 모르겠다.)
3) "while(getchar() != '\n'); 입력"
fflush(stdin)을 사용하지 않고
다음 입력에서 \n(엔터값)이 아닌 다른 문자가 입력될 때까지 입력을 계속 받도록 하는 명령어를 추가하는 방법인듯
이렇게 하면 엔터값을 입력값으로 받지않을테니 말이다.
※ Visual Studio 2017 버전이라면 fflush(stdin) 사용이 안되므로
위 방법을 이용해야 한다.
018. 문자 여러 개 입출력(4)
"문자만 입력 시에는 getchar 함수를 추천한다."
전용함수가 가장 좋다!
scanf | getchar |
범용 | 문자 전용 |
정수, 실수, 문자, 문자열 모두 입력 가능 |
문자만 입력 가능 |
'프린터, 팩스, 복사기 다 되는 복합기보다는, 프린터만 확실히 잘하는 전용 기계가 좋음'
scanf의 경우 여러 기능을 사용하게 되니 프로그램 자체가 무거워진다(프로그램의 크기가 커진다).
※ 프로그래밍은 크기와 속도가 좌우한다.
프로그램의 크기가 커짐 → 속도가 느려짐 → 하드웨어 비용 증가 |
프로그램의 크기가 작아짐 → 속도가 빨라짐 → 하드웨어 비용 감소 |
019. 문자열 입출력(1) : scanf
* 문자열을 변수를 선언할 때는 변수의 크기를 지정해주어야 한다.
(이 때 선언되는 것을 변수가 아닌 배열명이라고 한다.)
* 문자열 입출력에 사용하는 서식문자는 %s
"scanf는 공백을 만나면 입력이 종료된다."
따라서 공백을 포함할 때는 사용하면 안된다.
020. 문자열 입출력(2) : gets
* gets(배열명);
"gets 함수는 공백을 포함할 수 있다."
공백을 포함할 때는 gets 함수를 사용하자.
'이전 글' 카테고리의 다른 글
[코딩 연습/C] 5일차 (026~035) (0) | 2019.05.10 |
---|---|
[코딩 연습/C] 4일차 (021~025) (0) | 2019.05.08 |
[코딩 연습/C] 2일차 (006~010) (0) | 2019.05.06 |
[코딩 연습/C] 1일차 (001~005) (0) | 2019.05.05 |
Main Memory (주 기억 장치) 개요 (0) | 2019.04.24 |