월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
10 : 33 쯤 질문 있습니다.
안녕하세요 교수님. 강의를 듣던 중 궁금한 부분이 있어서 질문 드립니다. 10 : 33에서 div * div <= num으로 연산 횟수를 줄이셨는데 교수님 말 처럼 그냥 경험으로 쌓고 넘어가기엔 원리가 궁금해 도저히 머릿속에서 떠나질 않네요. 혹시 참고 할만한 자료나 설명이라도 있을까요? 조금 수학적인 내용이라 강의의 주제에서 벗어나긴 하지만 도움울 주실수 있으시다면 꼭 부탁드리고 싶습니다.
- 미해결홍정모의 따라하며 배우는 C언어
헤더 파일과 static 변수에 대해 질문 드립니다.
main.c 에서 헤더파일 혹은 다른 모듈 안의 함수를 호출했을때, 함수가 동작하는 것은 그 함수의 본체가 있는 파일 안에서 동작하고 return 값만 main.c로 돌려주는 건가요? , 그래서 다른 파일에서 static으로 접근을 막아놓은 변수가 main.c의 함수 호출로도 조정이 되는 걸까요 ?!
- 미해결홍정모의 따라하며 배우는 C언어
배열과 포인터의 산술 연산
안녕하세요:) 연습 문제 구현 중, swap(&arr[min_idx], &arr[i]); 이 부분을 swap(arr + min_idx, arr + i); 이렇게 구현을 해봤는데, 똑같이 작동해 확인 차 여쭤보려고 질문을 달게 되었습니다. 전에 포인터는 산술연산이 가능하지만, 배열은 산술연산이 안된다고 하셨는데요. 여기서 arr은 배열이지만 산술연산이 가능한 것은 함수로 들어오면서 arr이라는 변수명이 포인터처럼 작동하기 때문에 가능한 것이 맞나요? 감사합니다:)
- 미해결홍정모의 따라하며 배우는 C언어
2.0f와 2.0의 차이
숫자 뒤에 붙는 f의 유무는 float형과 double형의 구분으로 알고 있습니다. circum=2.0*PI*radius로 코딩을 했을 때 에러가 발생해서 2.0f로 바꿨더니 에러가 사라졌습니다. 변수가 float형으로 고정되었을 때에는 모든 실수뒤에 f를 붙어주지 않으면 오류가 발생하나요? 2.0f 와 2.0을 컴퓨터가 받아들일 때 어떠한 차이가 있는지 잘 모르겠습니다 ..ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
이진수 재귀함수 반환형을 정수형으로 했는데 값이조금 다릅니다
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<ctype.h> #include<stdbool.h> #include<stdlib.h> int bin(int num)//n: parameter { if (num > 1) bin(num / 2); int i= printf("%d", num % 2); return i; } int main() { int num = 10; printf("%d\n", bin(num)); return 0; } 이렇게 정수형으로 반환하는 코드로 짰는데 출력값이 10101이 나왔습니다.. 1010 뒤에 왜 1이 붙여서 나오는지 궁금합니다!!
- 미해결홍정모의 따라하며 배우는 C언어
L-value와 Object에 대해 질문드립니다.
강의 16:40 쯤, L-value 는 Object다 라고 하신 부분에 관해 질문 드립니다. Q1. Object는 메모리 공간 자체고, L-value는 그 공간을 참조하는 expression이나, identifier라고 하신 설명과는 다른 것 같아서 질문 드립니다! Q2. 또, arr[0] 이 object라고 하신 부분도, arr[0] 이 어떠한 메모리 공간에 접근 가능하게 한다는 것은 알겠는데 위 질문과 같은 맥락으로 혼란이 있습니다. ! object가 메모리 공간 그 자체를 의미하는거라면 script 상에는 아예 존재하지 않는 것이 아닌가... 하는 질문입니다! Q3. arr == &arr[0]이 메모리 주소값임에도 Object를 의미히지 않는 이유는 "메모리 주소값" != "메모리 공간" 으로 받아들이면 될까요???
- 미해결홍정모의 따라하며 배우는 C언어
재귀호출 팩토리얼 질문
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<ctype.h> #include<stdbool.h> #include<stdlib.h> int fact(int n)//n: parameter { int i=1; int fa = 1; if (i < n) { i++; fa *= i; fact(i); } return fa; } int main() { int num = 5; printf("%d\n", fact(num)); return 0; } 이렇게 코드를 짜보았는데 재귀함수를 사용할 때 원래변수 n이 아닌 i같은 다른변수를 사용하면 오류가 뜨나요? 컴파일 자체가 안됩니 다 ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
컴파일과 링킹
컴파일과 링킹의 차이점에 대해 설명해주신 강의가 몇강인지 알려주시면 감사하겠습니다
- 미해결홍정모의 따라하며 배우는 C언어
텍스트 파일 불러오기 2번째
myfile안에 hello만 입력하고 다음과 같이 실행시켰는데 rrrrr이 출력되었습니다 텍스트 파일은 메모장 기반?입니다. 코드 중에서도 궁금한게 있는데 getchar을 사용하지 않고 getc를 사용하는 이유는 무엇인가요?? file에 입력된 정보를 가져올 때는 버퍼를 가져올 때와는 다르게 getc를 사용해야 하는건가요??
- 미해결홍정모의 따라하며 배우는 C언어
텍스트 파일 불러오기
교수님 말씀대로 프로젝트 파일과 같은 위치에 있음에도 불구하고 my_file을 읽을 수 없다고 나오는데 뭐가 문제인건가요??
- 미해결홍정모의 따라하며 배우는 C언어
메뉴 만들기 예제 질문
교수님이 하신대로 switch문 말고 if와 elseif를 활용하여 제대로 실행만 되면 상관없나요?? 아래는 제가 스스로 해본 것인데 실행만 되면 잘한것인가요?? #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { // 목표: 메뉴 만들기 예제 풀기 switch case문을 활용해서 문제를 풀어도 상관없음!!! char x; int a; printf("Enter the letter of your choice:\n"); printf("a. avengers b. beep\n"); printf("c. count q.quit\n"); while (1) { scanf("%c", &x); if (x == 'a') { printf("Avengers assemble!\n"); printf("Enter the letter of your choice:\n"); printf("a. avengers b. beep\n"); printf("c. count q.quit\n"); } else if (x == 'b') { printf("\a"); // 비프음 내기: \a printf("Enter the letter of your choice:\n"); printf("a. avengers b. beep\n"); printf("c. count q.quit\n"); } else if (x == 'c') { scanf("%d", &a); printf("%d\n", a); for (int i = 0; i <= a; i++) { printf("%d\n", i); } printf("Enter the letter of your choice:\n"); printf("a. avengers b. beep\n"); printf("c. count q.quit\n"); } else if (x == 'q') { printf("Program is quit thank you!!\n"); break; } else printf("Error\n"); } return 0; }
- 미해결홍정모의 따라하며 배우는 C언어
안녕하세요! 포인터 질문 드립니다!
먼저 이전 강의에서 많은 질문으로 어느 정도 개념이 잡히고 있는 듯 하여 감사 말씀드립니다!!! 이전 강의의 질문에서, arr == &arr[0] == &arr 이라고 답변을 받았습니다.arr == &arr[0] 이 동치인것은 받아들였으나, 아직 arr == &arr 이 같은지 잘 모르겠습니다 ㅠㅠ말씀 주신것처럼, arr은 변수명으로, 자기 자신의 주소가 별도로 없어, &arr로 찍어보아도 첫번째 원소의 주소를 나타내는 것은 확인했습니다.그러나, 완전히 동치인지는 잘 모르겠습니다 ㅠㅠ printf("%u %u\n", arr, arr+1);printf("%u %u\n", &arr, &arr+1); 위의 코드로 테스트해보면, arr의 경우 포인터연산이 arr[0]의 크기인 12만큼 움직이는 것을 알 수 있고,즉 arr -> arr[0]에 대한 포인터로 생각됩니다. &arr의 경우 포인터연산이 arr 전체의 크기인 24만큼 움직이는 것을 알 수 있고, 이는 &arr->arr에 대한 포인터로 생각됩니다. 기존에arr == &arr[0] == &arr 이라 하심은,단지 "값" 만을 기준으로 동일하다는 뜻이었을까요?ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
scanf에 대한 질문입니다
while(scanf("%ld",&input) != 1) 이 부분에서 !=1이 아니라 !=0이라고 입력하면 원하는대로 프로그램이 작동하지 않는 이유가 궁금합니다. 1 대신 다른 숫자를 입력하면 제대로 작동하는데 !=0을 쓰면 제대로 작동하지 않습니다. while(scanf("%ld",&input) != 0)로 입력했을 때의 결과입니다. Please input an integer and press enter. hello Your input is -858993460. Thank you.
- 미해결홍정모의 따라하며 배우는 C언어
안녕하세요! 강의 내용과 관련해 질문 드립니다.
int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; int* parr[2] = { arr[0], arr[1] }; printf("%p\n", &parr[0]); // 1 printf("%p\n", parr[0]); printf("%p\n", arr); printf("%p\n", &arr[0]); // 2 printf("%p\n", arr[0]); printf("%p\n", &arr[0][0]); 강의 내용중 , 위의 코드와 관련하여 질문 드립니다! 일단, arr[0] 이라는 이름이, 배열이름으로 사용되어 포인터처럼 동작한다고 이해했습니다. 즉, arr[0] 이라는 배열의 첫번째 원소를 가리키는 주소를 담은 포인터 인것으로요! Q1. 위 이해가 맞는지 여쭙고 싶습니다. 그렇다는 가정 하에, &parr[0] 가 결과가 다르게 나오는 것도 이해를 할 수 있습니다. parr[0] 은 arr[0] 이라는 포인터이고, & 연산자로 "그 포인터의 주소"를 출력하는 것이니까요 이중포인터처럼 이해했습니다. 그런데 여기서 주석 2의 출력 결과가 다르게 나오는 부분이 이해가 가지 않습니다. arr[0] 은 배열 이름으로 사용되고, 포인터로 동작을 하는데, &arr[0]을 찍으면 그 포인터의 주소가 나와야 하는 것이 아닌지.... parr[0] = arr[0] 인데 말입니다! Q2. parr[0] = arr[0] 인데, &parr[0] 은 포인터의 주소를 출력하고 &arr[0]은 어떤 원리로 다른 값을 출력하는지 궁금합니다 parr이라는 "포인터 배열"을 통해 접근할때는 arr[0]이 포인터처럼 자기 자신의 주소를 그제서야 갖게되고, 그냥 arr[0] 으로 직접 접근하면 그냥 배열명이기 때문에, 자기 자신의 주소는 없는 그런건가요?
- 미해결홍정모의 따라하며 배우는 C언어
22분 코드 논리 연산 관련해 질문있습니다.
22분 작은 버퍼를 반복해 사용해 큰 버퍼를 사용하는 것처럼 보이는 코드입니다. int main() { char small_array[5]; puts("Enter long strings:"); while (fgets(small_array,5, stdin) != NULL && small_array[0] != '\n') fputs(small_array, stdout); } 여기서 while (fgets(small_array,5, stdin) != NULL && small_array[0] != '\n') 를 안쪽의 &&대신에 || 을 사용해봤습니다. 제 예상은 엔터만 입력할시 종료되는것이었는데, 엔터를 치니 그냥 엔터로 받고 출력까지 하는것을 보았습니다. 왜 그런 건가요? ------------------------------------------------------------ 조금 더 고민해봤습니다. 제가 이해한 바로는 && : NULL이거나 엔터거나 둘중 하나면 아웃. || : NULL이거나 엔터거나 둘다 만족하면 아웃. ||일때 엔터 치면 못빠져나오고 반복하는 것을 보아, NULL 이 아니거나, small_array[0]가엔터가 아니어서 만족을 못한다는 것인데, 둘 중에 뭘 만족 못하는지 모르겠습니다. -------------------------------------------------------- 코드를 살짝 고쳐가면서 보아 엔터만 쳤을때는 NULL 이 아닌것을 확인했습니다. 왜 엔터를 쳤을땐 아무 입력도 없는데 NULL값이 아닌가요? fgets를 써서 \n이 자동으로 없어지지 않아서 그런건가요?
- 미해결홍정모의 따라하며 배우는 C언어
while(*str)??
void Transpose(char* str) { while (*str) { if (islower(*str)) *str = toupper(*str); else if (isupper(*str)) *str = tolower(str); str++; } 1. 트랜스포즈함수에서 while문 조건식에 (*str)이 의미가 뭘까요?? *str에 값이 있다면 while문으로 들어가서 실행해라는 의미인가요?
- 미해결홍정모의 따라하며 배우는 C언어
typedef에서 *하나와 두개의 차이
char(*complicated_function1())[3] { return &char3; // Returns a pointer to char[3] typedef char(*FRPTC3())[3]; typedef char(*(*PTFRPTC3)())[3]; FRPTC3* fptr2 = complicated_function1; PTFRPTC3 fptr3 = complicated_function1; 여기서 FRPTC3의 *하나와 PTFRPTC3의 * 두개의 차이는 뭐죠?? 이중포인터인가요??
- 미해결홍정모의 따라하며 배우는 C언어
21:24에서 주석문 질문드립니다.
49번줄 주석문에 if(!ptr)라고 써져있는데 if(ptr)이 맞는거 아닌가요? 오타인 거 같아서 질문드립니다.
- 해결됨홍정모의 따라하며 배우는 C언어
질문x) 내가 만든 메뉴 만들기 예제
안녕하세요. ***스스로 고민해보고 정말 모르시겠다면 봐주세요. 따로 function(함수)를 만들지 않고 main으로만 구현된 초판입니다. 감사합니다. int main() { int count; char choice; while (1) { printf("Enter the letter of your choice:\n"); printf("a. averngers\t\tb. beep\n"); printf("c. count\t\tq. quit\n"); choice = getchar(); switch (choice) { case 'a': printf("Avengers assemble!\n"); break; case 'b': printf("\a\n"); break; case 'c': { printf("Enter an integer : \n"); scanf("%d", &count); for (int i = 1; i <= count; ++i) printf("%d\n", i); break; } case 'q': { printf("Good-bye!\n"); return; } default: printf("Your choice is wrong.\nTry again.\n"); } while (getchar() != '\n') continue; } return 0; }
- 미해결홍정모의 따라하며 배우는 C언어
버퍼에 관한 질문 (수정본)
Q1) A가 출력되지 않는 이유는? 영상 (02:40)에 나오듯이 scanf의 %c는 한 문자만 읽을 수 있음으로, "A 3 2"을 입력시, A만 호출되고 \n는 버퍼에 남겨지는 상태를 볼 수 있습니다. 그로 인하여, 다음 출력문으로 입력하였던 "B 1 2"대신에 (\n 3 2)가 먼저 출력되는 것을 확인할 수 있습니다. 여기서 우리는 실제 scanf(%c %d %d)버퍼에 입력된 값이 ('A', 3, 2, '\n')임을 알 수 있습니다. scanf(%c %d %d) ↔ ('A', 3, 2, '\n') 그래서 다음과 같은 테스트를 진행해보았습니다. 영상(02:40)와 달라진 점은 기존에 \n자리에 s가 들어가고, 바로 그 뒤에 '\n'이 붙는다는 점입니다. 즉, 현재 scanf(%c) 버퍼에는 'A', 's', '\n'가 들어가 있는 것이죠. 그렇다면 총 (A 3 2), (s 3 2), (\n 3 2)순으로 while문이 출력되어야 할 것이라는 것이 저의 예상이었습니다. 그러나 위 결과물처럼 'A'는 생략되고, 's'가 출력되는 것을 확인할 수 있습니다. 한편, 버퍼에 남아있던 '\n'는 잘 출력되는 것을 확인할 수 있습니다. ----------------------------------------------------------------------------------- 2) 영상 (05:10)의 오해. // 자문자답 (선생님의 코드와 동일합니다. "* 3 5 빈칸"을 입력하셔서 한 번 반복되신 것으로 확인됩니다. 아마 사람들은 빈칸을 못보고 지나간 다음에 스스로 테스트한 것과 달라서 의문이 생길 수 있으니 다음 분들은 참고해주세요!) 영상에 나온 코드로 "A 3 2"를 입력하면 while문은 종료하게 됩니다. 왜냐하면 while문의 조건이 (c = getchar()) != '\n')인데, 질문1처럼 'A'과 함께 '\n'도 같이 입력이 되니, while싸이클을 한 번 돌고, 다시 올라오면 '\n'와 만나서 반복되지 않고 프로그램은 종료되는 것을 확인할 수 있습니다. 영상에서 보여진대로, 이는 while문 중간에 while (getchar() != '\n') continue;를 넣어주면 해결할 수 있습니다. 그 이유는 A 3 2를 입력하였을 때, getchar함수로 인하여 char c 변수에 'A' 문자 데이터가 저장되고, 버퍼에 남아있던 \n가 두 번째while문에서 읽혀지고 해당 while문 영역에서 벗어나면서 사라지기 때문입니다. ----------------------------------------------------------------------------------- Q3) \n는 어디로?? 본래, 저의 질문입니다. getchar을 청소해주는 while문을 주석처리해놓고, "# 3 2 빈칸"과 "% 1 2"를 입력해보았습니다. 얼핏보면 당연한 결과물이라고 생각할수도 있으나, 질문2에서 확인했다시피 "# 3 2" 싸이클이 끝나면 해당 while문은 '빈칸 3 2'을 한번 더 돌리고, '\n'을 만나서 종료되어야 했습니다. 즉, '\n'의 다음 순서인 "% 1 2"는 실행되어서는 안됩니다. "# 3 2 빈칸"을 입력하는 순간, 버퍼에는 ['#', 3, 2, '빈칸' '\n']가 저장이 됩니다. 이는 while문은 총 (# 3 2), (빈칸 3 2) (\n 3 2)를 돌릴 수 있는 경우의 수를 가지게 됩니다. 이 때, (\n 3 2)는 while문 조건에 의하여 종료되고 실행되지는 않아야 합니다. ***디버깅 테스트: 1. "# 3 2"가 출력된다. 2. 두 번째 싸이클인 "빈칸 3 2"이 시작되면 scanf함수가 실행이 됩니다. 3. scanf함수에 입력한 "% 1 2"는 버퍼에 들어가게 됩니다. 위 이미지처럼 char c변수에는 getchar함수로 인하여 '#'부터 '빈칸', '\n', '%'순으로 문자를 하나씩 버퍼에서 꺼내옵니다. 그 와중에 \n은 어디에서 제거가 된 것인가요?