putchar 함수의 이해
int putchar(int);
return putchar(아스키코드, stdiout); putchar를 쓰면 앞의 소스를 호출해서 바꿔준다.
#include<stdio.h>
int main()
{
smart(65);
return 0;
}
int smart(int ichar)
{
return fputc(ichar, stdout);
}
결과
![](https://t1.daumcdn.net/cfile/tistory/23173348551A41592D)
putchar와 getchar의 차이점 |
결과
putchar의 return 값은 입력된 문자의 아스키코드인것을 알수있다.
getchar는 단순히 아스키코드만 입력받기 때문에 한글자만 입력받을수 있다.
EOF는 End Of File의 약자이고 -1이 define되어있고 파일의 끝은 -1로 표시해준다.
함수 중간의 입력란에서 CTRL + Z를 누르면 실행이 종료되고 -1이 되면서 파일을 종료한다.
printf("Hi~\n"); 에서 ""가 의미하는 것은 무엇인가.
'H' 'i' '~' '\t char*로n' '0'로 이루어져있는데.
이건 우리가 정해준게 아니고 어딘가 존재하는 상수이다.
int printf ( const char * , ... );
//printf의 함수원형이다
puts, fputs 와 gets, fgets
puts 와 fputs는 문자열을 출력하는 함수이다.
#include<stdio.h>
int main(void)
{
char * str="Simple String";
printf(". puts test ------ \n");
puts(str);
puts("So Simple String");
printf("2. fputs test ----- \n");
fputs(str, stdout); printf("\n");
fputs("So Simple String", stdout); printf("\n");
printf("3. end of main ----\n");
return 0;
}
결과
puts 함수가 호출되면 문자열 출력 후 자동으로 개행이 이뤄지지만, fputs 함수가 호출되면 문자열 출력 후 자동으로 개행이 이뤄지지 않는다
gets 와 fgets는 문자열을 입력하는 함수이다.
scanf는 띄어쓰기가 불가능 했지만 gets와 fgets는 가능하다
|
gets를 사용하면 문장구성은 간단하지만 미리 정해놓은 배열을 넘어서는 길이의 문자열이 입력되면,
할당 받지 않은 메모리 공간을 침범하여 실행중 오류가 날수 있다.
그렇기 때문에 아래와 같이 fgets를 써준다.
fgets(str, sizeof(str), stdin);
위의 소스를 해석하면 stdin으로부터 문자열을 입력 받아서 배열 str에 저장하되,
sizeof(str)의 길이만큼만 저장해라 라는 의미랑 같다.
그래서 결과를 보면 str[7]을 주었기 때문에 null을 뺀 6자리를 사용해서 6까지만 출력하고
두번째 공간에 789를 저장한다.
#include<stdio.h> |
위의 소스는 숫자를 문자열로 만드는과정과
문자열을 숫자로 만드는과정이다
ATmega의 charLCD같은 경우는 아스키 코드로만 표현이 가능하기 때문에 글자를 아스키코드로 변환하는과정이 필요하다.
scanf의 경우 이러한 과정을 한번에 처리해준다(scanf는 위대했다!!)
Buffer
Buffer는 데이터의 효율적인 관리를 위해서 존재한다.
운영체제는 우리가 짠 프로그램에 데이터를 전송할때 메모리 버퍼라는 임시 저장공간을 가지고 있다.
버퍼가 정해놓은 만큼의 용량이 차면 혹은 엔터를 눌러주면 프로그램으로 데이터를 전송한다.
윈도우OS는 \n 개행문자를 안적어줘도 printf같은 경우는 출력이 되지만
다른 운영체제는 개행문자를 입력하지 않으면 아무것도 출력되지 않으므로 꼭 개행문자를 붙여줘야한다.
fflush(stdout); 출력버퍼를 비우면 모아둔 데이터를 프로그램으로 전송시킨다.
fflush(stdin); 입력버퍼를 비우면 적었던 것들을 전부다 날린다.
#include <stdio.h>
|
모두들 오늘 하루도 고생많이 하셨습니다
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20150406-15번 박제혁 - MP3, 워치독, PWM, RTC, 라즈베리파이 부팅 (9) | 2015.04.07 |
---|---|
2015-04-03 업무일지 출석번호 14번 박서연 - ATmega2560 LCD 컨트롤, 구조체 (6) | 2015.04.06 |
AVR과제(한글이름표시) 소스파일입니다. (4) | 2015.04.05 |
2015-04-01 업무일지 출석번호 12번 남수진 - 문자열 관련 함수 (8) | 2015.04.01 |
일본에서 유행인 사축(社畜) 동화 (10) | 2015.03.31 |
20150330-9번 김태영 퀴즈벨 만들기, 입력과 출력 (11) | 2015.03.30 |
20150327-8번-김재홍-PIC16F917폴링카운터&atmega128a시리얼통신 (6) | 2015.03.30 |
20150326-7번 김성현 pic를 이용한 count up &down ,UART (6) | 2015.03.27 |