월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
자료
안녕하세요 강의 열심히 듣고 있는 대학생입니다! 혹시 강의 자료 PPT들은 따로 공유해주지 않으시나요? 복습에 쓰고 싶어서요!
- 미해결홍정모의 따라하며 배우는 C언어
2차원 배열 만들때 자동화가 덜 되나요?
temp_data 2차원 배열을 만들때 일일히 36개의 온도를 다 입력하는게 아니라 그냥 예를 들어double data={year2016, year2017, year2018}로 해보려는데 이건 안되더라구요,Q. 2차원 배열을 선언할 때 { }안에 {}을 넣어줘야하는데 그냥 사전에 선언된 길이가 동일한 1차원 배열을 집어넣는건 왜 안되나요? 그냥 c에서 정해놓은 문법인가요?
- 미해결홍정모의 따라하며 배우는 C언어
Error in this lecture가 이 뜻 맞나요?
강의 8번째 코드printf("%d\n", *ptr); // 사용자가 입력한 숫자를 dereferencing하려고 해서 당연히 에러가 발생한다라고 강의에서 언급되는데 사실 정확한 이유를 모르겠어서 제가 추론한 게 맞나 궁금합니다.ptr의 주솟값 자체는 0으로 선언했으나 *ptr, 즉 주소를 따라가서 나타나게 된 그 변수의 값은 null이라서 null을 dereferencing 할 수가 없어서 에러가 생기는 것이다 라고 이해하면 맞을까요?
- 미해결홍정모의 따라하며 배우는 C언어
두번째 입력부터 컴파일을 멈춥는데 왜 그런거죠?
강의에 올라온 코드를 똑같이 입력해 컴파일을 해보아도 처음값까지는 잘 입력이 되는데 두번째로 입력하면 컴파일을 종료합니다. 답변 부탁드립니다. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { int num, sum = 0; int status; printf("정수를 입력해주세요 :\n"); status = scanf("%d", &num); while (status == 1) { sum = sum + num; printf("정수를 입력해주세요 :\n"); status = scanf("%d, &num"); } printf("sum = %d\n", sum); return 0; }
- 해결됨홍정모의 따라하며 배우는 C언어
0.2 강의 - 바이오스 질문!
안녕하세요 늘 좋은 강의 감사합니다.제가 강의를 대해 제대로 이해했는지 궁금해서 질문드립니다.처음 컴퓨터가 부팅될 때 모니터에 나타나는 항목들은(BIOS Setup같은..) ROM이라는 메모리에 저장된 정보들인가요?Bios Setup과 같은 항목들이 나타나는 화면부터 OS가 켜지기 전까지 Rom안의 부트 프로그램이 전반적인 하드웨어의 상태를 검사하는 건가요?어떤 블로그 글에서는 바이오스가 PC에 탑재된 모든 하드웨어 및 소프트웨어의 기본적인 동작을 제어한다고 합니다. 여기서 말하는 바이오스란 ROM안에 저장돼있는 부트 프로그램이라고 볼 수 있을까요?이것이 맞다면 블로그의 글은 ROM 바이오스를 퉁쳐서 그냥 바이오스라고 부르는 것인가요?(혹시 몰라 블로그 링크 올리겠습니다.https://blog.naver.com/comgghh/140176058280)
- 미해결홍정모의 따라하며 배우는 C언어
비주얼 스튜디오에서 계속 이런 문구가 뜨는데 어떡해 해야하나요...?
이거는 어떤 문제가 있어서 계속 나오는 건가요...?
- 미해결홍정모의 따라하며 배우는 C언어
리터럴에 대해 궁금증이 생겨 질문드립니다.
평소에는 머신코드로 작성된 실행파일의 형태로 존재하겠지만, 그 실행파일을 실행명령을 내려 운영체제가 RAM위에 올리게 되면 (RAM에 올리게되는 방식은 운영체제 프로그램별로, 컴파일러 프로그램별로 각각 상이함.)결국 main함수에서 소스코드로 써 내려간 명령코드들,프로그램 내부에서 사용하기 위해 선언 한 변수, 혹은 상수(const 변수), 그외의 리터럴값들 등등이 RAM위에 올라가게되고 CPU와 RAM의 상호작용으로 프로그램이 실행되고.보통 일반적으로 CPU가 RAM의 각 메모리주소 속 데이터를"복사"해서 레지스터에 임시저장시킨뒤 거기서 명령코드를 디코딩해서 해석한대로 명령코드들을 수행하는구나 라고 C언어 강의 첫주차에서 배웠던것이 기억나는데요.첫주차 강의를 들으며 제가 이해한 바로는,예컨대 int a = 42; 라는 코드를 프로그램이 수행하는 방식은1. a 라는 변수명에 할당되는 특정 메모리주소와 그 메모리주소의 공간에는 4byte라는 공간을 만들어 두게 될 것이고2. 42라는 리터럴 값 역시도 접미사가 붙지는 않았지만, 컴파일러가 컴파일 하는 과정에서 적절히 특정 정수형 자료형의 리터럴값으로 처리하여, RAM위에 올라간 다음 3. a = 42; 라는 대입연산자를 수행하게 되면42라는 값을 지시하는 메모리주소의 값을 CPU의 레지스터가 복사하여 임시저장하고있다가, 그것을 a라는 메모리주소에 대입시킨다 라고 이해하고 있습니다.질문드리고 싶은것은Q1)이번 5.2 강의에서 교수님께서 i = 1024; 라는 코드에서1024와 같은 리터럴 값들은 메모리 공간을 부여받지 못하기 때문에 data object가 아니다 라고 말씀하셨는데..리터럴 값들은 프로그램이 실행될 때, RAM에 올라가지 않는건가요? Q1-2) 만약 리터럴 값들을 운영체제가 메모리에 올려주지 않는다면 i = 1024; 와 같이 대입연산자의 명령을 CPU가 처리할 때, "어디서" 1024라는 리터럴값을 복사해서 레지스터에 임시저장해두었다가 a라는 메모리주소에 대입할 수 있는걸까요?Q2)const라는 제한자를 이용하여 선언 및 초기화시킨 상수는 메모리 주소도 메모리 공간도 가지고 있다. 그래서 l value이다.그런데 앞선 다른 5.2강의 질문들에서 object 들은 항상 l-value이지만, l-value들은 항상 object가 아니다 라는점 확인했습니다.그렇다면 초기화 이후 값을 변경할 수 없는 상수는 object가 맞는걸까요?아직 l-value와 object의 차이가 감이 안잡혀서 질문드렸습니다.
- 미해결홍정모의 따라하며 배우는 C언어
교환 문의
제가 따배씨와 따배씨++강좌를 혼동해서 잘못 결제했는데 ++강의로 남는금액 추가결제하고 강의 변경 가능할까요 c강의는 이미 다 알아서 아직 한번도 안들은 상태입니다
- 미해결홍정모의 따라하며 배우는 C언어
예제 코드문의
안녕하세요 수강중인 사람인데요~혹시 수업에 나오는 예제코드들을 다운받거나 할 수있나요??따라하며 배우긴 하는데, 양이 너무 많아서요~
- 미해결홍정모의 따라하며 배우는 C언어
07:30 int *ptr=&arr[0][0]; 질문있습니다.
2 차원 배열 첫 주소를 포인터에 대입해서 출력할 때강의를 보면서 들던 생각은 어째서 %d 로 값을 출력하는데asterisk 를 사용하지 않는지? 그리고 어떻게 포인터에 indexing 을 배열처럼 사용할 수 있는지 궁금합니다.그리고 포인터에 배열을 사용하지 않고 #include <stdio.h> int main() { int arr[2][3] = { 1,2,3,4,5,6 }; int* ptr = &arr[0][0]; for (int k = 0; k < 6; k++) printf("%d\n", *(ptr+k)); return 0; }이 코드처럼 asterisk 를 사용하여 주소 값에 자료형만큼 더하는 것과 어떤 차이가 있나요?
- 해결됨홍정모의 따라하며 배우는 C언어
while조건문 질문
int i=0;while (i++ < 10)printf("%d",i);를 실행할 경우 1~10까지 출력되는데 int i=0;while (i+=2< 10)printf("%d",i);를 실행할 경우 1,2,3,4,5,...의 무한루프가 실행됩니다 i++와 i+=2 둘 다 덧셈 연산이라고 생각해서 제가 예상한 결과는 2,4,6,8,10을 출력하는 것이었는데, 왜 다른 결과가 나온 것인지 모르겠어서 질문 드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
재귀함수에서 출력이 왜 연속으로 이루어지는지 모르겠습니다
void print_binary_rc(unsigned long n){int i = n % 2;if (n > 1)print_binary_rc(n / 2);printf("%d", i);}이게 강의에서 설명해주신 코드였습니다 강의에서 쓰신 print_binary 재귀함수를 그냥 Print_Binary_by_ReCursion의 약어로 pbrc로 표현했습니다.이건 재귀함수가 이루어지는 과정을 제가 생각한 방식대로 도식화 한 것입니다. 인셉션을 예로 들어 설명해주신 것철머 함수 안의 함수 안의 함수 안의 함수가 이루어진다는 것을 확인했습니다.제가 궁금한 것은 위 그림에도 적었듯이 n=1까지 와서 더 이상 n>=2가 되지 않아 if문을 탈출하고 pritnf("%d", i);를 만나게 되는데 그때 맨처음으로 i=1이 출력되는 것은 이해가 되었습니다. 하지만 위 도식의 화살표가 가르키는 것처럼 왜 그 다음 i=0이 출력되는 것인지 모르겠습니다.if 문을 탈출한 것은 n=1인 순간 뿐인데 왜 그 위 과정에서도 i=0을 프린트하게 되는 것인지 궁금합니다. 디버거로 찍어도 잘 안 보여서 질문드립니다. 만약 pbrc(2)가 pbrc(1)의 과정도 포함하고 있어서 프린트를 하는 것이라면pbrc(1)에서 i=1이 출력되고pbrc(2)에서 i=1 i=0이 출력되고pbrc(3)에서 i=1 i=0 i=1이 출력되고pbrc(4)에서 i=1 i=0 i=1 i=0이 출력되어버려서총 1 10 101 1010 라는 10자리 숫자가 출력되어야 한다고 생각이 들어서 이해를 도와주시면 감사하겠습니다 ++ 혼자 고민을 더하다가 제 나름의 답을 얻었는데 혹시 pbrc(1)에서 i=1을 출력하고 나면 이제 그 상위의 pbrc(2)의 단계에서 if문의 반복을 모두 마쳤으니 i=0을 출력하고 그리고 나서 pbrc(5)의 단계에서 if문 반복을 모두 마쳤으니 if를 탈출해 밑에 있는 i=1을 출력하고 마지막으로 pbrc(10)의 영역에서 if문을 모두 마쳤으니 밑의 i=0을 출력한다고 봐야 할까요? 이해가 될 듯하면서도 물고늘어지면 이해가 안됩니다
- 미해결홍정모의 따라하며 배우는 C언어
10.12 2중포인터의 작동원리 질문
10.12 에서 이중포인터 설명하실때int a = 7;int *ptr = &a;*ptr = 8;int *pptr = &ptr;**pptr = 9; 라고 자료화면이 나오면서 설명하시는데y = &x 일때 *y = x , y = &x 라고 알고있는데그렇다면 a = 7 일때 ptr = 7이고 *pptr 도 7이 되야 맞는 문법아닌가요 ?? 제가 잘못알고있는건가요??
- 해결됨홍정모의 따라하며 배우는 C언어
scanf 사용 시 커서 위치 질문
int i=0;scanf("%d", &i);printf("Value is %d\n", i)를 실행하고 i에 7을 입력하면7Value is 7 이라고 나오는데 scanf후에 printf를 실행하면 자동으로 줄이 바뀌는 것인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
버퍼 관련
2:30초 쯤에 관련된 질문입니다. 많은 질문들과 답변을 본 이후에도 확신이 가지 않는 부분들이 있어 질문드립니다.Q1)'s' = 스페이스바최초 A's'3's'3's'\n를 입력하게 되면scanf의 경우 개행문자 즉, 공백을 만나는 순간까지만 변수에 저장하는 것으로 알고 있습니다.(이것 또한 맞는지 잘모르겠네요.)그렇기 때문에 버퍼에|A| |3| |3| |\n|가 입력되지만 마지막 3 이후에 's'에 의해 마지막 \n는 버려지고 마지막| |까지만 변수에 저장되는 것이 맞나요??Q2)Q1이 맞다면 처음 루프가 돌고 현재 버퍼에| |가 남아 있는 상태에서 두번째 입력B's'1's'2's'를 받게 되면 버퍼에| |B| |1| |2| |가 버퍼에 남게 되는 것이 맞나요??Q3)Q2)가 맞다면 함수로 진입했을 때 cr에 해당하는 문자는 's' 즉, 공백이 되고 그 다음 변수 자리에 또 문자가 들어오기 때문에 새롭게 초기화 되지 않고 기존의 3, 3을 입력하게 되는게 맞는지, 이전의 's' 공백이 해결되고 다시 루프로 진입하여 그 전에 입력된 B 1 2를 처리하는 것인지 궁금합니다.Q4)추가로 scanf("%c%d%d")와 scanf("%c %d %d")의 차이도 궁금합니다. 또 버퍼에 문자들 사이사이에 's' 즉, 공백의 경우 어떻게 처리되는 건지 궁금합니다. 아직 초보자라 질문의 의도가 정확히 전달되지 않을 수 있을 것 같습니다 이해 안가시는 부분은 다시 한번 알려주시면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
return n*recursive_factorial은 뭘 리턴하는거죠?
long rc_fact(int n){ if (n >= 1) { return n * rc_fact(n - 1); // tail recursion else return 1; }저는 recursive_factorial을 그냥 rc_fact로 줄여서 했습니다루프를 활용한 팩토리얼은 맞췄는데 그땐 결과값을 ans에 리턴한다해서 return ans;라고 하신게 이해가 잘 되었습니다.근데 return n * rc_fact(n - 1) 여기가 이해가 안됩니n에 5라는 값이 들어오고 5>1이므로 if 안으로 들어갈 텐데 뭘 반환해서 어디에 집어넣는다는건가요? 5*rc_fact(4)라는 값을 다시 int n에 집어넣겠다는건가요?그리고 안에 다시 꿈속의 꿈처럼 rc_fact(4)를 진행하고 그 rc_fact(4)에선 또 4*rc_fact(3)을 반환하고 반복하는 것이라고 이해를 했습니다. 하지만 어떤 값을 어디로 return 하겠다는 것인지는 아직 이해를 못했습니다. 이 rc_fact(5) 함수의 결과값이 5*rc_fact(4)인건가요? 즉 최종적으로 rc_fact(5) 함수의 결과값이 바로5*4*3*2*1*rc_fact(0)이 되어서 120이라고 봐야할까요
- 미해결홍정모의 따라하며 배우는 C언어
4:15에 나오는 float round-off문제에서 든 생각입니다
float a = 0.01f;변수 a를 이렇게 초기화 하면 실제 a에는0.01이 아니라 0.009999999776이 담깁니다.printf("%f", a);를 했을 때 0.010000이 나오는 이유가0.009999999776이 소수점 일곱번째자리에서 반올림 되어서 그렇게 출력되는게 맞는가요?
- 해결됨홍정모의 따라하며 배우는 C언어
ptr1와 &ptr1의 차이점
안녕하세요~ 강의 1분40초 쯤에printf("%p %d %p\n", ptr1, *ptr1, &ptr1); 코드를 출력하면 값이002AFAEC 100 002AFAE0이렇게 나옵니다.ptr1이랑 &ptr1이랑 arr[0]의 주소를 출력하는 걸로 알고 있는데 다르게 나오는 걸로 보니 제가 잘못 알고 있는 거 같습니다ㅠ ptr1이랑 &ptr1을 출력하면 값이 다르게 나오는데 이 둘의 차이는 무엇일까요? 헷갈리네요아래에 코드도 첨부해 놓았습니다.int main() { int arr[5] = { 100, 200, 300, 400, 500 }; int* ptr1, * ptr2, * ptr3; ptr1 = arr; printf("%p %d %p\n", ptr1, *ptr1, &ptr1); // 002AFAEC 100 002AFAE0 }
- 미해결홍정모의 따라하며 배우는 C언어
MONTHS나 YEARS로 나눌때, double을 쓰신 이유가 뭔가요??
해당 문제에서 평균 온도를 구하실때avg_temp /= (double)MONTHS; avg_temp /= (double)YEARS; 이렇게 작성하셨는데, (double)을 추가하신 이유가 있을까요?? 없어도 잘 작동하여서 여쭤봅니다. 답변해주시면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
버퍼 지우기에 대해 질문있습니다
8강부터 계속해서 입력한 값이 버퍼에 들어가있을때 원활한 루프 반복을 위해 버퍼에 들어가있는 값들을 비워내는 과정을 하는 것을 배웠습니다.while (getchar() != '\n')continue;근데 맨처음에 scanf와 printf, 그리고 while에 대해 배웠을때는 왜 위의 단계를 거치지 않았는데도 반복이 됐던거죠?int c=0;while(1){ scanf("%d", &c); printf("%d",c); } 이런 것들은 왜 버퍼를 비우지 않았는데도 반복이 되나요, 위의 예시와는 달리 얘는 입력받은 것도 c고 출력하는 것도 c니까 버퍼에 있는게 남김없이(엔터까지) 모두 출력되어서 그런건가요