[C] 원하는 걸 '입력' 해줘.

장세민·2022년 6월 28일
0

📝 TIL

목록 보기
3/40

printf의 변환 명세의 주의점

printf("%lf살 \n", age); 명령문을 보면
age는 int형 변수인데, 변환 명세는 double형 실수 %lf가 사용되었다.

이러한 경우, 에러는 발생하지 않으면서 이상한 값이 출력된다.

입력의 필요성

이전 시간까지는 키에 맞는 표준체중을 구할 때 대입문을 그때마다 수정 해줬어야 했다. 그러나, scanf함수를 이용하면 어떤 키든 해당 표준체중을 구할 수 있다.

키보드에서 타이핑하는 모든 내용은 문자로 인식된다. 입력한 데이터를 연산 가능한 정수나 실수로 사용하기 위해 scanf 함수를 사용한다.

scanf 함수 형식
scanf("%d", &height);

&는 변수의 기억장소 주소를 구하는 C 연산자이다.

scanf 과정

scanf 앞에는 출력문을 사용해야 다음에 무슨 값을 입력해야 하는지 알 수 있다.

scanf의 주의점

scanf("%d", &height);
scanf("%d\t", &height);
scanf("%d\n", &height);

"로 닫기 전에 이 곳에 빈칸, 탭(\t), 줄바꿈(\n)을 넣지 않는다.

scanf("%2d", &height);

입력 자릿수를 제한하지 않는 한 필드폭을 지정하지 않는다.

scanf("키는?%d", &height);

scanf에서는 절대로 출력을 할 수 없다.
출력할 내용은 printf 함수를 이용한다.

getchar 함수
변수 = getchar();

키보드에서 문자 1개를 입력하면 바로 int 타입으로 반환시켜주는 함수이다.

반환 명세 필요 없음!

표준체중과의 차이 구하기

#include <stdio.h>
 
int main()
{
    int height;
    double weight, s_weight, gap;
 
    printf("===자료 입력===\n");
    printf("키는?: ");
    scanf("%d", &height);
    printf("몸무게는?: ");
    scanf("%lf", &weight);
 
    s_weight = (height - 100) * 0.9;
    gap = weight - s_weight;
 
    printf("===결과 출력===\n");
    printf("표준체중 %.1lf과의 차이 %+.1lfkg \n",
                            s_weight, gap);
 
    return 0;
}
 

scanf로 여러 변수의 값을 한꺼번에 입력받기

scanf("%d %d", &age, &height);

변환 명세를 여러 개 사용하고, &변수명을 ,로 구분하여 차례대로 사용한다.

scanf의 주의점

scanf("%d ", &height);
scanf("%d\t", &height);
scanf("%d\n", &height);

"로 닫기 전에 공백 문자(빈칸, 탭, 줄바꿈)을 넣지 않는다.

95로 입력했을때 %d로 95 정수 한 개를 입력받지만 %d뒤에 공백 문자가 있으므로 공백 문자를 계속 읽게된다.

공백 문자가 아닌 다른 숫자를 입력하면 입력이 완료되지만 새로 입력한 값은 다음 입력문의 변수에 저장된다.

뒤의 입력문이 어떤 것이냐에 따라 실행 결과가 달라지므로 결과를 예측할 수 없다.

그러므로 사용 x

profile
분석하는 남자 💻

0개의 댓글