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

[37일차](홍정모의따배c)입력스트림과 숫자 본문

🖥C

[37일차](홍정모의따배c)입력스트림과 숫자

졸린새 2020. 10. 16. 03:43
728x90

[37일차](홍정모의따배c)입력스트림과 숫자

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

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

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

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

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

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

scanf는 입력할때 각 자료형을 지정해주고 그자료형에 맞는 데이터를 버퍼에 입력받고 저장한다.

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

int main()
{

    char str[255];
    int i, i2;
    double d;

    scanf("%s %d %lf", str, &i, &d);
    printf("%s %d %f\n", str, i, d);

		scanf("%s %d %d", str, &i, &i2);
    printf("%s %d %d\n", str, i, i2);

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

    return 0;
}

Hello 배열과 정수 123 실수3.14 를 s와 d 그리고 lf로 받고

출력할때도 그 자료형에 맞게 입력받았다

아직 프로그램이 끝나지 않은 상태이고

두번째 입력을 기다리고 있다

여기에 똑같이 Hello 123 3.14를 입력해보자

3까지만 출력하고 그다음 .14가 \n를 만나 다음줄에 출력됐다.

첫번째출력때는

    scanf("%s %d %lf", str, &i, &d);
    printf("%s %d %f\n", str, i, d);

실수를 입력받아 실수자료형으로 잘 출력을 했다.

두번째 출력에는

		scanf("%s %d %d", str, &i, &i2);
    printf("%s %d %d\n", str, i, i2);

scanf로 입력받은 버퍼에

배열과 정수까지 올바른 정수형으로 잘 입력받았다.

그러나 scanf는 각자료형에 맞지않는 입력을 인식하면

입력이 끝났다고 인식하고 버퍼에있는것을 출력한다.

3.14를 입력했는데 정수자료형인 d는

실수에 소수점 ' . ' 를 인식하지못하고

3까지만 입력을 받고 ' . '을 만나는 순간 아, 입력이 끝났구나 하고 받아들인다.

그래서 .14는 버퍼에 남게되고

출력되며

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

남아있던 .14는 getchar를 만나 출력하게된다.

Comments