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

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

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 입력 버퍼 에서 데이터를 읽는다.
-즉, 키보드 입력은 먼저 stdin의 입력 버퍼에 저장되고, scanf_s()gets_s()는 이 동일한 입력 버퍼에서 필요한 만큼 데이터를 읽어 각각 nAgeszName에 저장한다.

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

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

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

Câu trả lời 0

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

0

27

2

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

0

36

2

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

0

33

2

scanf("%d\n") 의미

0

52

2

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

0

66

2

Virtual Memory, Memory, Memory mapping tables

0

83

2

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

0

85

2

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

0

109

2

메모리 비교에 관한 질문

0

94

2

문자열 Null

0

74

1

C, C++

0

104

2

문자열 입출력 코드 에러

0

74

2

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

0

76

1

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

0

71

2

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

0

67

2

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

0

74

1

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

0

88

2

용어 설명 필요

0

65

2

stdin, stdout

0

79

2

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

0

102

2

아......ㅠㅠ

0

112

2

버퍼 내 엔터

0

84

1

2진수 뺄셈에서 carry-out

0

128

2

union 식별자는 실무에서 보통 어디에서 사용하나요?

0

89

2