• 2022. 5. 21.

    by. 데브촙

    반응형

    - 표준 입력 함수 scanfscan format의 줄임 표현

    - 다양한 키워드를 사용하여 문자, 문자열뿐 아니라 정수, 실수까지 모두 입력 받을 수 있도록 형식화된 입력을 제공

    - 형식화된 입력자신이 입력 받을 데이터의 종류, 자릿수, 입력 형식을 지정하여 입력

    int data;
    scanf(“%d”, &data);	// scanf는 포인터 기반의 함수이기 때문에, &를 꼭 넣어야함
    // scanf 함수를 사용하여 정수와 실수 값 입력 받기
    #include <stdio.h>
    void main()
    {
    	int int_data;
    	float float_data;
    	
    	scanf(“%d”, &int_data);
    	scanf(“%f”, &float_data);
    	printf(“input : %d, %f \n”, int_data, float_data);
    }

     

    scanf 함수에서 & 연산자를 사용하는 이유

    - scanf 함수는 포인터 문법을 사용하여 값을 반환

    int num1, num2;
    scanf(“%d %d”, &num1, &num2);

     

    scanf 함수에서 입력된 값을 구분하는 방법

    - 입력된 여러 개의 데이터를 Enter 키와 공백(Space) 문자로 구분

    - 특별한 값 없이 Enter 키나 공백 문자가 여러 개 입력되면 입력을 무시하고 실제 정보를 기준으로 입력 받음

     

    scanf 함수에서 문자열을 입력받을 때 주의할 점

    - scanf 함수로 문자열을 입력받을 때 중간에 공백이 들어가면 자신이 원하는 문자를 다 입력받지 못하는 문제 발생

    특사용자가 입력하는 문자열에 공백이 포함된다면 gets 함수를 사용하는 것이 더 좋음

    // scanf 함수를 사용하여 문자열을 입력받음
    #include <stdio.h>
    void main()
    {
    	char temp[32];
    	scanf(“%s”, &temp);			// 문자열을 입력받음
    	printf(“input string : %s\n”, temp);	// 입력받은 문자열을 출력
    }

     

    공백 문자로 구분해서 여러 개의 정보 입력받기

    scanf 함수로 정수 값을 입력받을 때 8진법(%o), 10진법(%d), 16진법(%x)을 구별해서 사용 가능

    // 공백 문자로 구분해서 scanf 함수로 8, 10, 16진수 입력받기
    #include <stdio.h>
    void main()
    {
    	int num1, num2, num3;
    	scanf(“%o %d %x”, &num1, &num2, &num3);			// 8, 10, 16진수 값 입력
    	printf(“input string : %d %d %d\n”, num1, num2, num3);	// 10 10 10 입력 시 출력결과 ->  input : 8, 10, 16
    }

     

    scanf 함수는 입력 형식 키워드와 자료형이 일치해야 함

    printf 함수와 다르게 scnaf 함수는 포인터를 사용하기 때문에 형식을 지정하는 키워드와 변수의 자료형이 맞지 않으면 프로그램에 오류 발생

    char data1 = 5;
    short data2= 6;
    int data3 = 7;
    printf(“%d %d %d”, data1, data2, data3); // 5 6 7 출력
    scanf(“%d %d %d”, &data, &data2, data3; // 실행 시 data1, data2의 자료 타입이 달라 오류 발생

     

    예시) scanf 함수를 사용하여 나이 입력 받기

    #include <stdio.h>
    void main()
    {
    	int num = 0;
    	while(1)
    	{
    		printf(“input age :”);
    		scanf(“%d”, &num);
    		if(num > 0 && num <= 130) break;
    		else printf(“Incorrect Age! \n”);
    	}
    	printf(“your age: %d \n”,num);
    }

     

    위 예제에서 scanf 함수를 사용할 때 잘못된 사용자 입력 처리하기

    사용자가 실수로 “abc”라고 입력하면 Incorrect Age!라는 메시지가 무한 반복됨

    형식을 지정하는 키워드와 사용자가 입력한 형식이 맞지 않아 문제 발생

    #include <stdio.h>
    void main()
    {
    	int num = 0;
    	while(1) // 정상적인 나이를 입력할 때까지 무한 반복
    	{
    		printf(“input age :”);
    		// scanf 함수는 실행에 실패하면 0을 반환
    		if(scanf(“%d”, &num) == 0) 
    		{
    			rewind(stdin);	// 입력 버퍼를 모두 비움
    			printf(“[Enter] digit number! \n”);
    		}
    		else
    		{
    			if(num > 0 && num <= 130) break;
    			else printf(“Incorrect Age! \n”);
    		}
    	}
    	printf(“your age: %d \n”,num);
    }

     

    반응형

    'C' 카테고리의 다른 글

    배열과 포인터 표기법  (0) 2022.05.22
    문자열을 정수로 변환  (0) 2022.05.20
    표준 입력 함수  (0) 2022.05.19