inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Lập trình C bắt đầu một cách quyết liệt

Nhập ký tự/số nguyên và bỏ ký tự xuống dòng

자문자답- 맞는지 틀린지 확인부탁드립니다.

Đã giải quyết

20

joon102661712

29 câu hỏi đã được viết

0

강의 내용 중에 궁금한 점이 있어 질문드립니다.
#include <stdio.h>

int main(void)

{

char szName[32] = { 0 };

int nAge = 0;

printf("나이를 입력하세요. : ");

scanf_s("%d", &nAge);

printf("이름을 입력하세요 : ");

gets_s(szName, sizeof(szName));

return 0;

}
처음에는 szNamenAge는 서로 다른 변수이므로 각각 다른 메모리 주소를 갖는다고 생각했습니다.

그래서 scanf_s("%d", &nAge)를 호출하면 사용자가 입력한 값이 nAge의 메모리 주소에 저장되고, gets_s(szName, sizeof(szName))를 호출하면 입력한 값이 szName의 메모리 주소에 저장되므로, 두 변수는 서로 다른 메모리 공간을 사용하기 때문에 scanf_s()에서 입력받은 \ngets_s()에 영향을 주지 않을 것이라고 생각했습니다.

하지만 실제로는 scanf_s()로 나이를 입력한 뒤 gets_s()가 별도의 입력을 받지 않고 바로 종료되었습니다. 강의에서 설명해 주신 내용처럼 scanf_s()가 남겨 놓은 \ngets_s()가 읽었기 때문이라고 이해했습니다.

이 부분이 궁금해서 강의를 다시보며 아래와 같이 이해했는데, 제가 이해한 내용이 맞는지 확인 부탁드립니다.

-szNamenAge는 서로 다른 메모리 주소를 갖는다.
-하지만 scanf_s(), gets_s()와 같은 입력 함수들은 각 변수의 메모리에서 직접 입력을 받는 것이 아니라, 공통으로 사용하는 stdin 입력 버퍼 에서 데이터를 읽는다. * 이 입력 버퍼는 szName, nAge와 같은 메모리 공간이 아닌 강의 중 강사님이 설명하신 추상화 File의 단 1개의 Buffered I/O로 이해했습니다.
-즉, 키보드 입력은 먼저 stdin의 입력 버퍼에 저장되고, scanf_s()gets_s()는 이 동일한 입력 버퍼에서 필요한 만큼 데이터를 읽어 각각 nAgeszName에 저장한다.

-따라서 scanf_s("%d", &nAge)는 숫자만 읽고 \n은 입력 버퍼에 남겨 두며, 이후 gets_s()가 같은 입력 버퍼에서 남아 있던 \n을 읽어 바로 종료된다.

제가 위와 같이 이해한 것이 맞는지 확인 부탁드립니다.

c 컴퓨터-구조 assembly-language vc++

Câu trả lời 1

0

nullnull8537

szName(char형 배열)과 nAge는 서로 다른 변수이므로 각자 별도의 메모리 공간을 사용합니다. 그리고 gets_s() 함수는 stdin 장치 파일 버퍼에서 '\n'이 나올 때까지 문자열을 읽어 옵니다. stdin에서 문자열을 읽어 오는 것은 scanf_s() 함수도 마찬가지 입니다.

콘솔 파일(stdin) 버퍼는 변수로 선언되어 있는 것이 아니며 내부적을 존재하는 메모리 입니다. 당연히 szName, nAge 변수와는 관련이 없습니다.

그러므로 잘 이해하셨습니다. :)

scanf_s 에 관해서 오류나옵니다.

0

6

2

메모리 동적할당시 메모리창 빨간 글씨

0

30

2

리눅스로 진행해도 될까요?

0

38

2

sizeof는 컴파일 타임 연산자라서 CPU를 사용치 않는다

0

34

2

scanf("%d\n") 의미

0

53

2

주소 연산자(&) 간접 지정자(*) 반대 개념

0

67

2

Virtual Memory, Memory, Memory mapping tables

0

83

2

샘플코드 출력 오류 발생 질문드립니다

0

85

2

값의 교환에 사용되는 변수의 위치.

0

109

2

메모리 비교에 관한 질문

0

95

2

문자열 Null

0

74

1

C, C++

0

104

2

문자열 입출력 코드 에러

0

74

2

선생님! 120화 2분 50초 질문입니다.

0

76

1

caller 가 메모리 할당 해제를 할 때의 문제점 질문

0

71

2

단축키 맞는지 여부 문의드립니다.

0

68

2

문자열을 사용하는 이중 포인터에 대하여 질문합니다

0

74

1

char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요

0

90

2

용어 설명 필요

0

65

2

stdin, stdout

0

79

2

필수 실습 (최댓값을 반환하는 함수)

0

102

2

아......ㅠㅠ

0

112

2

버퍼 내 엔터

0

85

1

2진수 뺄셈에서 carry-out

0

130

2