컴퓨터를 공부하고자 마음먹은지 N일차

[37일차](홍정모의따배c)입력확인하기 본문

🖥C

[37일차](홍정모의따배c)입력확인하기

졸린새 2020. 10. 16. 00:25
728x90

[37일차](홍정모의따배c)입력확인하기

*본 강의수기는 교수님의 모든 ppt나 코드 화면을 붙인게 아닙니다. 따로 출처 표시나 과제표시

안한 모든 코드와 사진자료의 출처는 본 강의의 교수님 입니다.

정리는 다시한번 제가 보기위함과 어떤강의인지 알려드리는 것이고

제가 적은건 이해를 돕기 위한 부연설명과 제가 이해한 몇개의 중심적인 내용이 다소

생략이 되었습니다. 이 수기를 통해 공부하려 하지말고 흥미로운 내용이라면

'인프런- 홍정모의 따라하며 배우는c' 과정을 수강하시길 바랍니다.

사용자가 입력한것을 확인시키고

올바르게 입력을 도와주는 프로그램을 만들자.

  • 교수님코드
#include <stdio.h>

int main()
{
    printf("Please input an integer and press enter.\n");

    long input;
    char c;

    while (scanf("%ld", &input) != 1)
    {
        printf("Your input - ");

        while ((c = getchar()) != '\n')
            putchar(c);

        printf(" - is not an integer. Please try again.\n");
    }

    printf("Your input %ld is an integer. Thank you.\n", input);

    return 0;
}

scanf값을 ld로 받고 반환값이 1이 아닐동안 while문 안에서 반복된다.

ld 를 입력하지않으면 입력한게 뭔지 확인시켜주고

계속 while문 안을 돌게한다

즉 입력한 꼬라지가 이상할때 while문 안에서 돌게하는 것이다.

ㄹㅇㅋㅋ

그런데 프로그램안에서 여러 입력을 받을때

각 입력한 값마다 상태를 알려주고 그입력값을 토대로 여러 기능을 추가하려고 할때,

그럴때마다 여러번 입력을 받기가 참 곤란하다

그래서 입력확인문 자체를 함수로 만들어주자.

우선 long타입으로 get_long이라는 함수를 프로토타입으로 먼저 선언해준다.

  • 교수님코드
#include <stdio.h>

long get_long(void);

int main()
{

    return 0;
}

long get_long(void)
{
    printf("Please input an integer and press enter.\n");

    long input;
    char c;

    while (scanf("%ld", &input) != 1)
    {
        printf("Your input - ");

        while ((c = getchar()) != '\n')
            putchar(c);

        printf(" - is not an integer. Please try again.\n");
    }

    printf("Your input %ld is an integer. Thank you.\n", input);

    return input;
}

get_long이라는 함수를 토대로

입력받은 값중 1부터 100의 수만 받는 코드를 만들어 보자.

  • 교수님코드
#include <stdio.h>

long get_long(void);

int main()
{
    printf("Please input a integer between 1 and 100.\n");

    long number = get_long();

    if (number > 1 && number <100)
        printf("Good boy!\n");
    else
        printf("Wrong input.\n");
    

    return 0;
}

long get_long(void)
{
    printf("Please input an integer and press enter.\n");

    long input;
    char c;

    while (scanf("%ld", &input) != 1)
    {
        printf("Your input - ");

        while ((c = getchar()) != '\n')
            putchar(c);

        printf(" - is not an integer. Please try again.\n");
    }

    printf("Your input %ld is an integer. Thank you.\n", input);

    return input;
}

55일때 확실히 칭찬을 해주고

194일때 잘못입력했다고 한다.

아쉬운게

  • 문제

wrong input일때 다시입력하라고 하고 하고싶다

  • 내코드
int main()
{
    printf("Please input a integer between 1 and 100.\n");

    long number = get_long();

    while(1)
    {
    if (number > 1 && number < 100)
        printf("Good boy!\n");
        break;
    else
        printf("Your input is %ld Please input a integer between 1 and 100. \n", number);
        continue;
    
    }
    return 0;
}

이렇게 했는데 else에서 오류가 뜬다고 한다.

  • 교수님코드

long get_long(void);

int main()
{
    printf("Please input a integer between 1 and 100.\n");

    long number;

    while(1)
    {

    number = get_long();

    if (number > 1 && number < 100)
    {
        printf("Good boy!\n");
        break;
    }
    else
        printf("Your input is %ld Please input a integer between 1 and 100. \n", number);
        continue;
    }
    return 0;
}

number를 while문 밖에서도 받기위해 number를 빼주고

number를 반복문안쪽에서 다시 선언해 줬다.

그리고 break를 쓸때 if문 안쪽으로 스코프를 설정을 해줘야한다.

정상작동

Comments