본문 바로가기
C 프로그래밍

독학으로 배우는 C언어 015 숫자 자료의 입력

by 솔토지빈 2024. 7. 14.
반응형

독학으로 배우는 C언어 015 숫자 자료의 입력

Contents

     

    1. 정수 자료 입력

    scanf()scan function의 약자인데 숫자, 문자, 문자열 등을 지정한 서식에 따라 입력받는 함수이다. printf() 함수와 같은 형태를 취하며 단지 키보드로부터 자료를 입력받는다는 것만 다르다.

     

    형식 : scanf(“양식1 양식2”,인수1,인수2)

    양식은 자료가 변수에 대입되는 형태를 지정한다. (형식 지정 문자)

    인수는 입력되는 자료가 대입되는 변수이다.

     

    실습 1: 하나의 정수 입력

    다음의 프로그램을 작성하여 ex047.c 저장하고 실행해 보자.

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>  
    int main(void)
    {
    	int a;
    	scanf("%d", &a);
    	printf("%d\n", a);
    	return 0;
    }

     

    설명 : 행 설명

    프로그램을 실행하면 키 입력을 기다리므로 숫자를 입력하고 엔터키를 누르면 입력된 값이 변수 a 에 대입되고 printf() 함수에 의해 입력값이 출력된다.

     

    1: 처음 보는 문장이라 당황했을 것이다.

    #define _CRT_SECURE_NO_WARNINGS는 비주얼 스튜디오에서 scanf() 함수를 사용하기 위해서 반드시 사용해야 하는 선언문이다. 다른 C 컴파일러에서는 사용하지 않아도 되지만 비주얼 스튜디오에서는 사용하지 않으면 에러가 발생한다.

    보안 문제 때문에 MS에서 권고하지 않아서 생긴 문제이다.

    만약 #define _CRT_SECURE_NO_WARNINGS를 사용하지 않으려면 scanf_s()를 사용할 수 있다.

    하지만 비주얼 스튜디오를 제외한 대부분의 C 컴파일러가 scanf() 함수를 사용하고 있어 호환을 위해서 scanf() 함수를 사용하는 것이 좋다.

    앞으로 scanf() 함수를 사용할 때는 에러 발생을 차단하기 위해 최상단에 #define _CRT_SECURE_NO_WARNINGS를 사용하는 것으로 이해하기로 하자.

     

    6: scanf("%d",&a); a라는 입력 변수앞에 &가 붙였다는 점에 유의하자.

    scanf() 입력함수로 입력받아 저장하는 변수 a 앞에 &는 엠퍼센트 라고 하고 scanf() 함수를 사용할 때 변수 앞에 꼭 붙여야 한다. &에 대해서는 추후 상세히 알아보기로 하고 scanf() 함수의 입력 변수에는 &를 붙여서 입력한다는 정도만 기억하자.

     

    실습 2: 두 개의 정수 입력

    다음의 프로그램을 작성하여 ex048.c 저장하고 실행해 보자.

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int su1, su2, hap;
    	scanf("%d %d", &su1, &su2);
    	hap = su1 + su2;
    	printf("%d + %d = %d\n", su1, su2, hap);
    	return 0;
    }

     

    설명 : 행 설명

    위 프로그램을 실행하여 보면 화면에 아무것도 보이지는 않지만, 입력 대기 상태가 된다.

    이때 숫자를 입력하는데 입력 변수가 2개이므로 아래와 같이 입력한다.

     

    6  (Enter)

    8  (Enter)

     

    또는 6 8 (Enter)  와 같이

    숫자 사이에 공백으로 구분하여 입력시켜도 결과는 동일하다.

     

    5: su1, su2, hap 를 정수형 변수로 선언한다.

    6: su1, su2 값을 입력받는다. 이때 변수 앞에는 & 을 사용한다.

    7: su1, su2 의 합을 구하여 hap에 대입한다.

    8: su1, su2, hap 를 출력한다.

     

    실습 3: 입력 내용에 대한 설명문 보여주기

    다음과 같이 ex048.c에서 printf("숫자 2 개를 입력하세요");’을 추가하여 ex049.c 저장하고 실행해 보자.

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int su1, su2, hap;
    	printf("정수 두 개를 입력하세요");
    	scanf("%d %d", &su1, &su2);
    	hap = su1 + su2;
    	printf("%d + %d = %d\n", su1, su2, hap);
    	return 0;
    }

     

    설명 : 행 설명

    ex048.c 프로그램에는 문제가 있다. 프로그램 작성자는 무엇을 입력해야 하는지를 알고 있다. 하지만 이 프로그램을 처음 실행시킨 사람은 실행 결과에 난감해할 것이다.

    어떤 동작을 해야 할지 모르기 때문이다. 입력하는 것인지도 모르겠고 입력해야 한다면 무엇을 몇 개를 입력해야 하는지도 모른다.

    그래서 printf() 함수를 사용하여 입력해야 하는 내용에 대한 설명을 출력하여 사용자가 올바르게 자료 값을 입력하게 할 수 있다.

     

    printf() 함수 안에 줄을 바꾸라는 표시 \n 을 사용하지 않는 이유는

    "숫자 2 개를 입력하세요 "

    바로 옆에 커서가 있어 주는 것이 보기 좋기 때문이다.

     

    문제 : ex049.c 프로그램을 다음과 같이 실행할 수 있도록 수정해 보자

     

    실행결과

    첫 번째 정수를 입력하세요.5 󰏮
    두 번째 정수를 입력하세요.6 󰏮
    5 + 6 = 11

     

    정답

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int su1, su2, hap;
    	printf("첫 번째 정수를 입력하세요.");
    	scanf("%d", &su1);
    	printf("두 번째 정수를 입력하세요.");
    	scanf("%d", &su2);
    	hap = su1 + su2;
    	printf("%d + %d = %d\n", su1, su2, hap);
    	return 0;
    }

     

    2. 실수 자료 입력

     

    소수가 포함된 숫자를 입력받는다.

     

    실습 1: 하나의 정수 입력

    다음의 프로그램과 같이 소수가 포함된 두 수를 입력받아 덧셈하는 프로그램을 작성하고 ex050.c 로 저장해 보자.

     

    실행 결과
    첫 번째 소수를 입력하세요 6.7
    두 번째 소수를 입력하세요 8.6
    6.700000 + 8.600000 = 15.300000

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	float su1, su2, hap;
    	printf("첫 번째 소수를 입력하세요 ");
    	scanf("%f", &su1);
    	printf("두 번째 소수를 입력하세요 ");
    	scanf("%f", &su2);
    	hap = su1 + su2;
    	printf("%f + %f = %f\n", su1, su2, hap);
    	return 0;
    }

     

    설명 : 행 설명

    키보드로 부터 실수형 변수를 입력 받으려면 scanf("%f",&su1); 의 형식을 사용한다.

    실수형이라고 선언한 것 외에는 앞에서 다루었던 정수형과 동일한 프로그램이다.

     

    문제1

    다음과 같이 두 수를 입력받아 실행되는 프로그램을 작성해 보자.

    실행 결과
    두 수를 입력하세요 ? 30 40
    합 계 =====> 70

     

    문제2

    밑변과 높이를 입력하여 삼각형의 넓이를 구하는 프로그램을 작성해 보자.

    실행 결과
    밑변을 입력하세요 ? 10
    높이를 입력하세요 ? 5


    삼각형의 넓이 = > 25.00000

     

    문제1 정답

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int a, b, c;
    	printf("두수를 입력하세요?");
    	scanf("%d %d", &a, &b);
    	c = a + b;
    	printf("합계 ========> %d\n", c);
    	return 0;
    }

     

    문제2 정답

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	float a, b, c;
    	printf("밑변을 입력하세요?");
    	scanf("%f", &a);
    	printf("높이를 입력하세요?");
    	scanf("%f", &b);
    	c = a * b / 2;
    	printf("\n");
    	printf("삼각형의 넓이 =======> %f\n", c);
    	return 0;
    }

     

    3. 길이를 제한한 정수 자료 입력

     

    scanf 함수에서 %d 에 수치를 넣어 필요한 길이까지 입력을 받을 수 있다.

     

    실습 1: 입력 길이 제한 입력

    다음의 프로그램을 작성하여 ex050_3.c 저장하고 실행해 보자.

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int a;
    	printf(" 정수를 입력하세요 ");
    	scanf("%3d", &a);
    	printf("%d\n", a);
    	return 0;
    }

     

     설명 : 행 설명

    scanf("%3d",&a);에서 123 을 입력하면 a 에는 123이 저장된다.

    만약 12345를 입력하면 3 자리를 초과한 45는 저장되지 않는다.

    이때 입력될 수 있는 정수의 범위는 0~999까지 입력이 가능하다.

    반응형

    댓글