# 표준 입력 함수
입력 버퍼는 특정 키를 누를 때가지 사용자 입력을 임시로 저장.
따라서 남아있던 글자가 나옴으로써 원하지 않는 결과가 나올 수 있음
# rewind
rewind 함수를 이용해 버퍼를 청소할 수 있다
# getchar
키보드로부터 문자 하나를 입력받는 표준 입력 함수
문자 한 개를 입력 받더라도 enter키를 눌러야만 작업이 완료됨
# 해결 방법1
엔터키를 한 번 더 호출해 enter키 값을 제거
# 해결 방법2
rewind 함수를 사용해 버퍼내에 남아있는 문자 제거
#include <stdio.h>
void main()
{
int input_data;
input_data = getchar();
printf("input : %c \n", input_data);
// 첫글자만 출력됨
rewind(stdin);
input_data = getchar();
printf("input : %c \n", input_data);
}
- 위 코드에서 rewind가 없으면 출력이 원하는 형태로 나오지 않음
# gets
문자열 입력 함수
char input_string[10];
gets(input_string);
# 문자열을 위한 gets
입력 버퍼에 엔터키를 남지 않는다
enter키 입력한 위치에 NULL 문자 0 이 추가된다
표준 입력을 받는 중 CTRL+C키를 입력하면 정상종료가 되지 않음
-> 따라서 if구문을 줌으로써 NULL이 아닐때만 출력하는 형태
#include <stdio.h>
void main()
{
// getchar
int input_data;
input_data = getchar();
printf("input : %c \n", input_data);
// 첫글자만 출력됨
rewind(stdin);
input_data = getchar();
printf("input : %c \n", input_data);
// 문자 gets
rewind(stdin);
char input_string[10];
gets(input_string);
printf("input : %s \n", input_string); // 문자열 출력
// 문자열 gets
if (NULL != gets(input_string)){
printf("input : %s \n", input_string);
}
else {
printf("input -> Canceled \n");
}
}
<문자열을 입력 받을 때 키 입력 횟수 제한하기>
#include <stdio.h>
int GetMyString(char buffer[], int limit)
{
int i;
for(i=0;i<limit;i++){
buffer[i] = getchar();
if(buffer[i] == '\n') // 문자열의 끝이면
{
buffer[i] = 0;
return 1;
}
}
// out of range
buffer[i] = 0;
rewind(stdin);
return 0;
}
void main()
{
char temp[10];
int state = GetMyString(temp, 9);
if(state == 1) printf("input : %s \n", temp);
else printf("input : %s -> out of range \n", temp);
}
# 문자열을 정수로 변환하기
- gets 함수로 입력받은 것들은 문자열로 입력받기 때문에 정수형을 원할때는, 따로 변환을 해야 한다.
방법 1.
아스키코드 표를 이용해 문자에서 '0'을 뺀다.
방법2.
자릿수를 체크해 10의 배수 pos_num을 만들고, 한 자리씨 추출할때마다 pos_num을 곱하고 10으로 나눈다.
// 문자열을 정수로 변환하기 -> 세자리밖에 정수로 변환못함
#include <stdio.h>
#include <string.h>
/*
void main()
{
int pos_num =100, num = 0, i, temp_num;
char num_string[4] = "123";
for (i=0;i<3;i++)
{
temp_num = num_string[i] - '0';
num = num + temp_num * pos_num;
pos_num = pos_num / 10;
}
printf("%s -> %d \n", num_string, num);
} */
void main() // ->upgrade 방식
{
int pos_num =1, num =0, i, count;
char num_string[4] = "123";
count = strlen(num_string);
for(i=0; i<count-1;i++) pos_num *= 10;
for(i=0; i<count;i++){
num += (num_string[i] - '0') * pos_num;
pos_num /= 10;
}
printf("%s -> %d \n", num_string, num);
}
방법3.
더 간단하게 문자열을 정수로 변환하는 방법
#include <stdio.h>
#include <string.h>
void main()
{
int num =0, count =0;
char num_string[4] = "123";
while(num_string[count] != 0){
num = num * 10 + (num_string[count] - '0');
count++;
}
printf("%s -> %d \n", num_string, num);
}
<gets 함수를 이용해 두 개의 숫자를 입력 받아 연산하기>
# atoi 함수 사용하기
#include <stdio.h>
#include <stdlib.h>
int main()
{
int first_num, second_num;
char first_string[16], second_string[16];
printf("input first number : ");
gets(first_string);
printf("input second number :");
gets(second_string);
first_num = atoi(first_string);
second_num = atoi(second_string);
printf("%d + %d = %d\n", first_num, second_num, first_num + second_num);
}
'FW 심화 과정 > [2] STM32심화실습' 카테고리의 다른 글
[C] 유용한 함수작성 (0) | 2022.08.01 |
---|---|
0729 C프로그래밍 기초 17~ (0) | 2022.07.29 |
0728 C프로그래밍 기초 15~16강 (0) | 2022.07.28 |
0727 C프로그래밍 기초 10~13강 (0) | 2022.07.27 |
0726 C프로그래밍 기초 1~3강 (0) | 2022.07.26 |
0722 브레드 보드의 스위치, LED를 GPIO로 제어하기 (0) | 2022.07.25 |