월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
마지막예제 형태에서 2번쨰if에 붙은 프린트f가 작동하지않는이유...?
#include <stdio.h> #define _CRT_SECURE_NO_WARNINS #include <stdbool.h> int main() { unsigned num, div; bool isprime = true; scanf("%u", &num); for (div = 2; (div*div) < num; ++div) { if (num % div == 0) { isprime = false; if (num == div * div) printf("%u div by %u\n", num, div); else printf("%u div by %u and %u\n", num, div, num / div); } } if (isprime) printf("%u 는 소수다", num); else printf("%u 는 소수가아니다", num); return 0; } 위와같이 작성했는데 실행시켜서 16을 입력하면 아래사진처럼 됩니다. 혹시나해서 중괄호로if와 else둘다 스코프를 나눠봐도 동일합니다...
- 미해결홍정모의 따라하며 배우는 C언어
강의 8:26 부분 질문입니다.
코드 21번째 줄과 23번째줄 25번쨰 줄이 잘 이해가 안되네요. 현재 코드에서 pt는 a single pointer to one int니까 배열내의 int원소 한개의 주소를 가리키는&ar1[0][0]는 가능 하다는것이 납득이 됩니다. 그런데 23번째 줄에서 ar1[0] 같은 경우 왜 pt에 대입이 가능한가요? ar[0]는 a pointer to [3] int 아닌가요? 그러면 a single pointer to one int와는 타입이 다르니까 pt에 대입이 되면 안될거 같아요. 그리고 25번째 줄에서 ar1이 대입이 안되는 이유는 ar1은 pointer to [2][3] int라서 안되는건가요? 그리고 한가지 더궁금한게 왜 ar1[0]이게 a single pointer to single int가 되는건가요? 이차원 배열에서 첫번째 row를 가리키고 있으니까 오히려 a single pointer to 3 int가 맞지 않나요?
- 미해결홍정모의 따라하며 배우는 C언어
콤마의의미는 or? and?
강의에서 f및 F를 X로 바꾸는 부분에서 선생님은if (ch=='f' || ch=='F')ch='X'라고하셧는데 여기서 or 문자인||이아니라 if (ch=='f', 'F')ch='X' 이렇게 콤마를 붙여도 정상작동하는데 둘의 차이는 무엇이고 콤마로했을때의 단점은 무엇일까여~
- 미해결홍정모의 따라하며 배우는 C언어
확장자명이 없는경우
안녕하세요? 강의를 보고 따라하는 과정에서 제가 노란색으로 형광펜칠해놓은 두 부분에 확장자명이 표기되어있지 않습니다. 강의와 비교해봤을때 각각 .exe와 .obj가 쓰여있어야 하는데 안써있는이유가 뭔가요? 그리고 안쓰여있는경우의 문제점이 있을까요?
- 미해결홍정모의 따라하며 배우는 C언어
왜 작동 안하는지 모르겠습니다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void display(c, rows, cols); int main() { char c; int rows, cols; printf("input one char and two int\n"); while ((c = getchar()) != '\n') { scanf("%d %d", &rows, &cols); while (c != '\n') continue; display(c,rows,cols); printf("put another char and two int\n"); } return 0; } void display(c, rows, cols) { for (int i = 1; i <= rows; i++) { for (int j = 1; j <= cols; j++) { printf("%c", c); } printf("\n"); } } scanf밑에 있는 while (getchar() != '\n') continue; 문구를 while (c != '\n') continue; 이렇게 바꿔서 했는데 안되는 이유가 무엇인가요?
- 미해결홍정모의 따라하며 배우는 C언어
본강의의 44초경 배열 초기화 질문입니다.
교수님께선 코드 11번째 줄에 배열을 초기화 할때 char words[MAX] = { '\0', }; 이렇게 하셨는데요. 굳이 널 캐릭터를 넣는이유가 있을까요? char words[MAX]; 처럼 초기화 해도 문제 없이 작동 하는거 같아서요.
- 미해결홍정모의 따라하며 배우는 C언어
변수초기화
배열 변수는 int my[5]=0; 이것처럼 변수초기화가 안되서 초기값이 -858993460인데 배열 전체의 값을 전부 초기값을 0으로 잡는 초기화를 하려면 loop 문 사용하는 방법밖엔 없을까요? 좀더 간단한 방법이있나싶어서요
- 미해결홍정모의 따라하며 배우는 C언어
c 파일에서 Header를 불러오지 않아도 잘 실행이 됩니다. 왜그럴까요?
마지막 그림에서와 같이. 함수의 Body가 있는 파일에서 #include [Header]를 하지 않아도, 컴파일러가 알아서 잘 Link를 해주는거 같습니다. Header를 부르지 않아도 되는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
default value of an uninitialized boolean
7:00 초기화 시키지 않은 isPrime 의 디폴트 값은 참인가요? 거짓인가요? 정해지지 않은건가요? 검색을 해봤더니, 참이라는 곳도 있고 거짓이라는 곳도 있는데, 제가 실행했을 때는 초기화하지 않았다고 에러가 나서 헷갈려서 여쭤봅니다. 감사합니다!
- 미해결홍정모의 따라하며 배우는 C언어
배열의 갯수를 넘는 n번째 배열을 불러오는 이유?
int my_numbers[5]; for (int a = 0, b = 1; a < 6; ++b, ++a) { my_numbers[a] = b; printf("%d %d \n", my_numbers[a], a); } 배열은 5까지있는데 배열안에 자리가 첫대입자로부터의 거리라고하여서 my_nembers[4] 까지만 유효한 변수인 것 같아요. 근데 이게참 궁금한게 디버거로했을떄는 배열이라고해서 int mynembers{1, 2, 3, 4, 5} 이렇게까지 값이 들어가길래 아 이게 배열이 5개인거지 5까지가 배열이아니구 그래서 0~4번 배열 총 5개구나 이해는했는데 이게 런타임에러가뜨긴하지만 무시를 누르면 처음에 했던대로 출력은 되네요 그럼 컴퓨터는 어디서 존재하지않을 6번쨰 배열을 가져오는 걸까요???출력내용은1 02 13 24 35 46 5입니다
- 미해결홍정모의 따라하며 배우는 C언어
#define 과 변수선언이 위에있는 것은
예제를 표현하기 위함인가요? 아니면 안에있으면 복잡해서그럴까요? for (int a = 0; a < 5; a++) { for (char b = 'A'; b <= 75; b++) printf("%c ", b); printf("\n"); } 저는 이런식으로해봣는데 이러면 선생님한거와의 비교했을떄 불편함이뭘까요
- 미해결홍정모의 따라하며 배우는 C언어
8분 29초 함수의 인자로 static을 쓰면 안된다고 하신부분의 질문입니다.
함수의 인자로 static이 오면 안된다는건 함수가 실행될때 새로운 스택 프레임이라는 공간을 배정받는데. 파라미터도 이때 동일한 스택 프레임 안에 메모리를 배정받기때문이다 라고 말씀해주셨는데요. 즉 스택에쌓여야할 것을 데이터 또는 BSS에 담으려고 하니 문제가 생긴다는 것일까요?
- 미해결홍정모의 따라하며 배우는 C언어
1분 34초 함수 구현 질문있습니다.
교수님께서는 93번째 줄에 함수 구현하실때 void fit_str(char* str, unsigned int size) { if (strlen(str) > size) str[size] = '\0'; } 위와 같이 구현 하셨는데요 이러면 사실상 배열에 5번째 글자만 널캐릭터로 바뀌고 "do it!"은 그대로 메모리에 남아있을것 같아서 완전히 문자열을 잘라냈다고 보기는 어렵지 않나요? 궁금해서 msg 배열의 모든 원소를 일일히 출력할수 있게 이하와 같이 함수를 실행해봤는데 실제로 5번째 원소인 , (쉼표) 만 널캐릭터로 바껴서 출력 안되고 나머지 부분은 그대로 배열에 남아있는것을 볼수 있습니다.
- 미해결홍정모의 따라하며 배우는 C언어
6.15 중첩된 루프들에서 이해가 안되는 것이 있습니다
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요. #include <stdio.h> #define NUM_ROWS 12 #define FIRST_CHAR 'A' // #define LAST_CHAR 'L' int main() { int r; // row loop int c; // charcter loop for (r = 0; r < NUM_ROWS; ++r) // [out loop] r=0 이고 0,1,2,3,4,5,6,7,8,9,10,11,12 값을 반복 하며 { for (c = FIRST_CHAR + r; c < FIRST_CHAR + NUM_ROWS; ++c) // [inner loop] { printf(" %c ", c); } printf("\n"); } return 0; } 이 반복문에서 for 2번째 inner loop에서 c < FIRST_CHAR + NUM_ROWS; 를 하는데 왜 알파벳이 줄어들면서 반복되는지 잘 이해가 안되네요 NUM_ROWS; 값은 12인데 A B C D E F G H I J K L B C D E F G H I J K L C D E F G H I J K L 이렇게 줄어들면서 나오는 이유가 궁금합니다 • 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다.
- 미해결홍정모의 따라하며 배우는 C언어
const와 define 사용
안녕하세요:) 이전에 다른 분께서 비슷한 질문을 하셨는데, 궁금한 점이 남아있어 질문을 드리게 되었습니다. #define SIZE 5 가 아닌 메인함수 내에서 const int SIZE = 5; 로 사용하면 에러가 나는 것에 대해 교수님께서 c에서는 문법적인 이유로 불가하다고 하셨는데, 그 문법적인 이유가 무엇인지 더 자세히 여쭤봐도 될까요?
- 미해결홍정모의 따라하며 배우는 C언어
1분 18초경 puts 함수 관련 질문있습니다.
비주얼 스튜디오에서 puts 함수에 마우스를 올려보면 버퍼의 포인터라는것을 인자로 받는다고 나오는데요. puts(str[3]); 가 에러가 나는것은 str[3]는 주소(포인터)가 아니라 배열에 담긴 문자 그자체라서 puts 함수의 인자가 포인터가 오지 않았기 때문에 에러가 나는게 맞을까요?
- 미해결홍정모의 따라하며 배우는 C언어
가상 메모리
포인터 변수는 가상 메모리 주소를 갖고 있다고 알고 있습니다. c에서 스택에 쌓이는 포인터 변수와 힙에 쌓이는 포인터 변수를 선언하고 주소값을 찍어보면 스택영역의 포인터 변수는 높은 주솟값이 나오고 힙영역에 존재하는 포인터 변수는 낮은 주솟값이 나오는데 그 차이가 제법 크다고 느껴집니다. 실제 메모리에서는 해당 변수가 근접해있는데 가상 메모리에서 보았을 때 갖는 주솟값은 멀리 떨어진 것으로 잡히는 건가요? 실제 메모리 공간에서는 프로그램 마다 특정 영역을 정해서 존재한다고 알고 있어서 이 개념이 헷갈리네요..ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
regular characters에 관한 질문입니다
int a, b; scanf("%d ,%d", &a,&b); //1 scanf("%dA %d", &a,&b); //2 printf("%d %d\n", a, b); //3 printf("%d %d\n", a, b); //4 이렇게 디버깅을 하면 1번 3번에 대응하고 2번이 4번에 대응할줄 알았는데 3번 4번이 모두 %dA %d로 출력이 되더라고요 ㅠㅠ printf함수는 원래 최근의 scanf함수만 출력하는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
while 문과 for문의 차이에 대해 질문드립니다.
안녕하세요. 강의 내용을 기존에 배웠던 while문과 비교해보기 위해 연습 중 궁금한 사항이 생겨 질문드립니다. i = 1; while (i++ <= 10) { printf("%d ", i); } 해당 while문을 실행시켜보면, i가 10 이 되었을때, while문의 조건을 만족시킨 뒤, i++를 실행하여 i==11이 되고, i==11 인채로 다시 while의 조건부로 올라가서 해당 조건은 만족시키지 못해 block은 실행하지 않으나 i++는 실행이 되어 결과적으로 i == 12 가 됨을 확인했습니다. 이 내용을 다음과 같이 for 문으로 옮겨보았습니다. int i; for (i = 1; i <= 10; i++) // 1, 2, 3 { printf("%d ", i); } 해당 for 문에서는, loop를 빠져나온 이후의 i가 12가 아닌 11이 나옴을 확인했습니다. i == 10 일때, for 문의 조건을 만족시킨 후, i++를 실행하여 11이 되고 block 내용을 실행합니다. 여기서 while과 다르게 for문은 i == 11 을 for문에 조건부에 대입하여 참거짓을 판별하지 않는건가요? 그 과정이 있다면 while과 같게 12가 나와야 하는 것으로 생각했으나, 차이가 있는 듯 하여 질문을 드립니다!
- 미해결홍정모의 따라하며 배우는 C언어
14:15 부분 질문 있습니다
float(*pa)[4]; -> 4개의 float를 가진 배열에 대한 포인터 '1개' float* ap[2]; -> float '포인터를 2개' 가진 배열 printf("%u %u\n", (unsigned)pa, (unsigned)(pa + 1)); -> pa는 단순히 포인터이므로 주소 자체를 대입-> arr2d[0] , arr2d[1]의 주소 출력 printf("%u %u\n", (unsigned)ap, (unsigned)(ap + 1)); -> ap는 포인터의 배열, 배열의 이름은 배열의 시작 주소를 의미 -> ap[0], ap[1]의 주소(포인터 변수의 주소) 출력 제가 이해한 게 맞나요?