월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨홍정모의 따라하며 배우는 C언어
예제 질문입니다
교수님 예제에서 print_binary 함수를 만드실때 remainder 라는 변수를 쓰셨는데다른 변수를 쓰지 않고 파라미터에서(?) 받아온 num 변수만을 사용해 밑에처럼 짜면 문제가 생기나요?
- 미해결홍정모의 따라하며 배우는 C언어
[5.1 반복 루프] goto문 결과 질문
5.1 강의의 6:11초쯤에서 goto문의 출력 결과로 1~9까지만 나오고 10은 안 나왔는데 나중에 설명한다고 하셨는데 설명을 안 하셔서 질문 남깁니다.교수님이 작성하신 코드에서는 n이 10일 때 printf를 안 하고 바로 goto out;이 실행되기 때문에 결과가 9까지 출력되는 것 맞나요?goto문으로 1~10까지 출력되는 반복문을 만들려면 n == 10이 아니라 n == 11로 써야하는 것 맞을까요?
- 해결됨홍정모의 따라하며 배우는 C언어
continue의 용도
이번 예제의 count 함수와 get_first_char함수에 사용된 continue; 들은 어떤 의미를 가지나요??7.10 강의에서 말씀하신 '세미콜론만 있으면 잘 안보이기때문에 단지 눈에 잘 보이기 위한' 용도인가요?
- 해결됨홍정모의 따라하며 배우는 C언어
sizeof operator malloc
4.2강 10:26 부분에서 int* int_ptr = NULL;int_ptr = (int*)malloc(sizeof(int) * 30); 위와같은 코드를 printf("size of pointer %zu bytes\n", sizeof(int_ptr));이렇게 실행했더니 결과값이 malloc을 지우나 안지우나 8이 나오는데 이것또한 운영체제의 32인지 64인지에 따라 다른건가요?
- 미해결홍정모의 따라하며 배우는 C언어
4.7 %f, %g, %% 질문
printf("%f %f %lf\n", 3.141592f, d, d);의 결과로 3.141593이 출력되던데 왜 3.141592가 아니라 갑자기 3.141593이 출력되는 건가요?printf("%g %g\n", 123456.789, 1234567.89);의 결과로 123456이 아니라 123457이 출력되는 이유가 무엇인가요? %g라는 게 정확히 어떤 건지 궁금합니다강의 코드의 주석에printf("%%\n", d); // Note the warning. d is ignored.라고 적혀져 있던데 warning이 발생하는 이유는 무엇이고 d가 무시된다는 것은 무엇인가요?이 주석에 대해서도 설명해주시면 감사하겠습니다
- 미해결홍정모의 따라하며 배우는 C언어
scanf에 녹색줄 없애기
안녕하세요 이전까지 강의 들을때는 scanf에 녹색줄이 뜨지 않았는데요, 이번에 비주얼 스튜디오를 새로 깔고 나니 계속 scanf에 녹색줄이 뜨면서 " 반환값이 무시되었습니다." 메세지가 뜨네요. 실행은 잘 되지만 계속 거슬려서, 해결할 수 있는 방법이 있을까요? ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
마지막 custom input function 예제에서 버퍼비우기 코드의 역할이 궁금합니다
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define STRLEN 81 char* custom_string_input(char* st, int n); int main() { char word[11]; puts(custom_string_input(word, 11)); return 0; } char* custom_string_input(char* st, int n) { char* ret_ptr; int i = 0; char ch; ret_ptr = fgets(st, n, stdin); if (ret_ptr) { while (st[i] != '\n' && st[i] != '\0') i++; if (st[i] == '\n') st[i] = '\0'; //else // while ((ch = getchar()) != '\n') // clear buffer // continue; } return ret_ptr; }1.위의 코드에서 버퍼 비우기 코드 else 부분을 주석 처리하고 실행해도, 버퍼에 남아있는 문자들이 결과에 영향을 주지 않는 것 같은데요(재실행해도 이전 버퍼에 영향을 받지 않는 것 같고요)버퍼 지우기 코드가 있어야 할 이유가 있나요? 안정성을 위한 부분일까요?2.버퍼를 디버거의 memory로 확인하는 방법이 있을까요? 버퍼에 대해 헷갈릴 때 직접 디버거로 찍어보고 싶은데, 방법을 모르겠어요 3.gets()함수에 대해 설명하실때,gets() reads one line and removes \n and add \0라고 하셨는데, 여기서 \n을 지운다는게 버퍼에서 지운다는 얘기일까요?
- 미해결홍정모의 따라하며 배우는 C언어
23:30 질문입니다
char heart[] = "I love Kelly!"; char* head = "I love Kelly!"; head = heart; //Ok heart = head; // Errorhead = heart; //Okheart = head; // Error선생님 전자는 되고, 후자는 안되는 이유가 뭐죠?생각보다 포인터와 배열의 차이를 알듯하면서도 계속 헷갈려서 스스로가 너무 답답해요ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
[3.11] 4바이트 정수 범위에서 왜 유효숫자가 9개인지 모르겠습니다.
-2,147,483,648에서 -2 자리는 모든 숫자 (-3, -4) 이런 건 안 되니까 정밀도로 보장할 수 없고 나머지는 정밀도로 보장이 된다고 하셨는데 -2 자리는 왜 정밀도로 보장할 수 없다는 건지 뭐가 안 된다는 건지 이해가 되지 않습니다. 그리고 정밀도로 보장한다 안 한다의 개념이 무엇인지 좀 더 명확하게 알고 싶습니다. exponent를 저장할 때 음의 지수가 필요- unsigned 형태로 저장을 하고 127을 빼기 8bit 정수는 0 ~ 255까지인데 -127을 하면 -127 ~ 128 범위의 숫자를 표현할 수 있기 때문+) unsigned int 타입으로 저장을 할 때 모든 bit가 0이거나 1인 경우에는 다른 용도로 사용을 한다고 함 일반적으로 -126에서 128의 범위를 가짐 위 설명에서 이해 안 되는 점 1. 컴퓨터가 지수를 저장할 때 왜 음의 지수가 필요한지2. 다른 용도라는 게 무엇을 말하는 건지3. 앞에 음의 지수를 나타내는 방법 설명하실 때는 0~255 범위에서 -127을 하니까 -127~128 범위를 가진다고 하셨는데 왜 추가적으로 설명한 부분(모든 bit가 0이거나 1인 경우)에서는 -127~128이 아닌 -126~128의 범위를 가지는지답변 해주시면 감사하겠습니다.
- 해결됨홍정모의 따라하며 배우는 C언어
1.5 통합 개발 환경 소개 질문
안녕하세요. 1.5 강의를 듣던 중 링커에 대해 궁금한 것이 있어 글 올립니다. 강의에 따르면 컴파일이란 Visual studio같은 문서 편집기에 사용자가 작성한 소스 코드를 컴퓨터가 이해할 수 있도록 번역하는 역할을 한다고 말씀하셨습니다. 이 컴파일이라는 소프트웨어는 언어 자체에 존재하는 것인가요? 아니면 통합 개발 환경과 같은 문서 편집기에 존재하는 건가요? 컴파일이라는 소프트웨어는 링커라는 소프트웨어를 포함하고 있는 건가요? 아니면 둘은 따로 분리된 소프트웨어인가요? 늘 친절한 답변 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
[3.0 고정 너비 정수] least의 의미가 궁금합니다
질문글을 살펴보니 int_least8_t는 char과 같다고 하던데 최소 8비트면 그 이상 범위의 큰 숫자가 와도 되는 것 아닌가요? 최소 @비트의 정확한 의미가 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
[3.9 고정 너비 정수] %d에서 d의 의미가 궁금합니다.
d32할 때 d가 decimal의 약자라고 하셨는데 decimal의 뜻은 소수, 십진법이라고 나옵니다. 여기서 decimal이 소수를 뜻하는 것이라면, int는 정수형 자료형인데 왜 형식 지정자는 정수가 아닌 소수를 뜻하는 decimal의 약자 d를 사용하는 것인가요? %d의 decimal이 십진법을 뜻하는 것이라면, 십진법은 0~9까지의 수이기 때문에 정수로 치고 이를 decimal = 정수 이렇게 정의 내려서 정수형 자료형의 형식 지정자로 %d를 쓰게 된 것인가요?
- 미해결홍정모의 따라하며 배우는 C언어
포인터 연산에 관한 질문.
#define CRT_SECURED_NO_WARNINGS#include <stdio.h>#include <string.h>void fit_str(char*, unsigned int);int main(){ char msg[] = "just,""do it!"; puts(msg); printf("lenght %d\n", strlen(msg)); fit_str(msg, 4); puts(msg); printf("length %d\n", strlen(msg)); return 0; }void fit_str(char*a, unsigned int b){ a[b] = '\0';} 마지막 줄의 a[b]는 되는데 a+b는 왜 안될까요...? a는 포인터 배열이기 때문에 a+b 연산이 a[b]와 같지 않나요?
- 미해결홍정모의 따라하며 배우는 C언어
8.5 getchar()와 scanf()를 함께 쓸 때 버퍼 비우기
안녕하세요, 공부하다 버퍼에 대한 궁금증이 생겨 질문드려요!아래의 코드를 실행하고 콘솔에서 입력할 때, A(엔터'\n')3(공백)5(엔터'\n') 의 형식으로 입력하게 되면, A와 3 사이에 제가 입력한 엔터는 따로 버퍼 비우기를 하지 않았는데도 scanf를 만났을 때 문제를 일으키지 않는데요..! 그 이유를 알고 싶습니다.강의 너무 잘 듣고 있고, 교수님 강의 덕에 c에 대해 더 본질적으로 알게 되는 것 같아 늘 감사드립니다!#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void display(char cr, int lines, int width); int main() { char c; int rows, cols; printf("Input one character and two integers : \n"); while ((c = getchar()) != '\n') { scanf("%d %d", &rows, &cols); while (getchar() != '\n') continue; display(c, rows, cols); printf("Input another character and two integers:\n"); printf("Press Enter to quit.\n"); } return 0; } void display(char cr, int lines, int width) { for (int i = 0; i < lines; ++i) { for (int j = 0; j < width; ++j) putchar(cr); putchar('\n'); } }
- 미해결홍정모의 따라하며 배우는 C언어
p2와 ar2가 왜 호환이 안되는지 모르겠습니다.
교수님이 p2는 이중포인터이고 ar2는 2개의 int를 가진 배열의 포인터...?라고 말씀하시는데 잘 모르겠습니다. 말씀이 이해가 안됩니다. p2는 두번의 주소값을 거쳐야 하는데 ar2는 ar2[0][0]의 주소값을 의미하기 때문에 한번만 주소값을 거칠 수 밖에 없어서 호환이 안되는건가요>?
- 해결됨홍정모의 따라하며 배우는 C언어
0.8 CPU가 일하는 방법 질문
안녕하세요. 강의를 보며 궁금한 점이 있어 글 올립니다. 프로그램을 실행할 때 운영체제가 보조기억장치에 저장된 프로그램을 주기억장치로 복사한다고 알고 있습니다. RAM에 프로그램의 명령어와 프로그램에 저장된 변수들이 복사된다면, 명령어와 변수는 각각 메모리의 다른 부분에 서로 연결된 상태로 복사되어 저장되는 건가요? 질문 읽어주셔서 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
0.6 컴퓨터 메모리의 기본 구조 질문
0.6 파트에서 질문 드릴 것이 있어 글 작성합니다. cpu가 ram으로부터 필요한 정보를 빼올 때, 메모리의 데이터는 항상 캐쉬 메모리에 저장된 뒤에 cpu에서 그 데이터를 연산하는 건가요? 캐쉬 메모리 덕분에 자주 사용되는 데이터를 ram에 직접 요청하지 않고도 cpu가 가져와 사용할 수 있는 것 같은데, 이때 자주 사용되는 데이터가 되는 기준은 무엇인가요? cpu가 ram에게 '어느 주소에 있는 데이터를 보내세요.'라는 요청을 할 때, 그 요청을 control bus가 전달하는 건가요? 그리고 강의를 보면 ram이 그 요청을 수락할 수도 거절할 수도 있는 것 같은데, 이 수락과 거절의 개념이 잘 와 닿지 않습니다. ram이 cpu의 요청을 거절하는 특정한 예시 하나 정도만 이야기해주시면 감사하겠습니다. 질문 들어주셔서 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
8.8 메뉴 만들기 예제 개행 입력시 문자가 무시됩니다
안녕하세요! 아래의 코드를 실행시킨 뒤 먼저 '\n'입력 후 원하는 메뉴키를 입력하면 원하는대로 처리가 되지 않아요.가령 이런식으로 엔터를 먼저 입력하고 q를 입력하면 quit를 실행하지 않고 다시 while문을 돌더라고요.디버거로 한단계씩 살펴보니 문제는 get_first_char()함수에서 발생하는데, 처음에 getchar() 함수로 개행(\n)을 받으면서 다음 버퍼비우기(?) 코드에서 또 다시 입력을 받는 것 같고, 이 함수의 리턴값은 처음에 받았던 개행(c='\n')으로 나가서 생기는 문제 같은데요..이 코드에서 어떻게 고쳐야 처음 들어올 개행도 입력오류처럼 처리할 수 있을까요?? 코드는 아래와 같습니다! #define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>char get_choice(void);char get_first_char(void);int get_integer(void);void count(void);int main(){int user_choice;while ((user_choice = get_choice()) != 'q'){switch (user_choice){case 'a':printf("Avengers assemble!\n");break;case 'b':putchar('\a');break;case 'c':count();break;default:printf("Error with %d.\n", user_choice);exit(1);break;}}return 0;}void count(void){int n, i;printf("Enter an interger:\n");n = get_integer();for (i = 1; i <= n; ++i)printf("%d\n", i);while (getchar() != '\n')continue;}char get_choice(void){int user_input;do{printf("Enter the letter of your choice:\n");printf("a. avengers\tb. beep\n");printf("c. count\tq. quit\n");user_input = get_first_char(); } while ((user_input < 'a' || user_input > 'c') && user_input != 'q'); return user_input;}char get_first_char(void){int ch;ch = getchar();while (getchar() != '\n')continue;return ch;}int get_integer(void){int input;char c;while (scanf("%d", &input) != 1){while ((c = getchar()) != '\n')putchar(c);printf(" is not an integer.\nPlease try again.\n");printf("Enter an interger:\n");}return input;}
- 미해결홍정모의 따라하며 배우는 C언어
malloc의 매개변수로 배열의 크기를 전달하는 이유가 궁금합니다
메모리 공간을 얼마나 사용하던지, 결국 malloc()은 사용하는 배열의 첫주소인 void유형의 포인터를 반납하는데,"힙에서 메모리 공간을 얼마나 사용하겠다"라고 전달하여 메모리를 배정받는 이유가 궁금합니다. 어떠한 장점이 있는건가요 ??
- 미해결홍정모의 따라하며 배우는 C언어
3.3 scanf() 15분 18초 질문
교수님께서 설명하신 부분 중에 왜 이렇게 하는가라는 게 왜 scanf 입력을 받고 메모리에 덮어쓰는가 이 뜻인가요? 이렇게 한다라는 게 정확히 어떻게 한다는 것인지 궁금합니다.그리고 왜 이렇게 하는지에 대한 이유가C문법에서는 함수 출력 1개만 가능하고, scanf함수는 여러개의 입력을 받고 값을 바꿔줘야 하는데 그걸 출력으로 할 수 없기 때문이라고 하셨는데함수 출력을 1개만 가능하다는 게 어떤 건지, 값을 바꿔주는 걸 출력으로 할 수 없다는 게 무슨 말인지 잘 모르겠습니다,,, 조금 더 설명 해주시면 감사하겠습니다!