월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 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은 어디에서 제거가 된 것인가요?
- 미해결홍정모의 따라하며 배우는 C언어
mac os환경에서 unsigned long 질문 드립니다.
mac os환경에서 Xcode를 이용해서 따라하고 있고, unsigned long 질문 드립니다. 강의내에 printf("%u\n", sizeof(unsigned int)); printf("%u\n", sizeof(i)); 이렇게 입력을 했더니 Recommend로 u -> lu 로 바꾸라는 주석이 계속 떠서 u와 ul의 차이가 궁금해서 질문 남깁니다! printf("%lu\n", sizeof(unsigned int)); printf("%lu\n", sizeof(i));
- 미해결홍정모의 따라하며 배우는 C언어
질문) m1n_q님의 질문의 답변, 이해했는지 확인하고 싶어요.
안녕하세요. C언어는 질문도 상당히 많고, 길기도 하네요.. 질문드리기가 정말 실례되네요 ㅋㅋ... 저의 뇌피셜..;;이지만 제가 이해한 게 맞는지 확인하고 싶어요..ㅠ 처음에 while((c = getchar()) != '\n') 부분에서 " * 공백/3 공백 5 공백 "을 받은 것이 중요한 포인트입니다. 여기서 차곡차곡 순서대로 쌓인 버퍼에서 3과 5 앞의 공백은 각각 L-value 변수들을 구분하기 위한 공백입니다. 따라서 char의 버퍼에는 '*', 'space', '\n'가 들어가게 됩니다. 결과적으로 while은 총 (* 3 5), (space 3 5), (\n 3 5). 세 가지의 경우의 수를 갖게 됩니다. 아래 주석1) 이 설명에 잘못된 점이 하나 있습니다. 처음에 char버퍼에 *과 space와 \n가 있다고 했는데, 그렇다면 (%, 2, 2)가 출력되지 전에, \n를 만나서 while문이 실행되지 않아야 합니다.. \n가 중간에 어디선가에서 제거가 되는 것인데.. 또는 제가 완전히 잘못 이해했던 것일거에요 ㅋㅋ...(허탈) ------------------------------------------------------ 주석1) joy님 말씀대로라면 "두번째로 scanf가 실행되게 되었는데 버퍼엔 \n 만 남아있게되므로 scanf 에서 가져올게 없는 상태입니다. 근데 이때 \n는 버퍼에서 비워집니다." 이 때문에 sp, 3, 5에서 scanf를 호출할 때, \n는 사라지고 (%, 2, 2 + '\n')가 들어가니 %, 2, 2가 끝나고 while에서 \n를 만나게 되는 것 같습니다.
- 미해결홍정모의 따라하며 배우는 C언어
Warning 질문이요
안녕하세요? 선생님께서 이 강의에서 하신 것을 따라하고 있는데 선생님은 No issues found 인데 저는 왜 Warning 이 뜨는 건가요? 그리고 저 경고는 무슨 뜻인건가요?
- 미해결홍정모의 따라하며 배우는 C언어
malloc 함수 메모리 해제
malloc 함수를 사용하여 메모리를 할당할경우 메모리를 해제해주어야 하는 걸로 알고있는데 비주얼 스튜디오같은 경우는 컴파일러가 자동으로 처리를 해주는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
정수가 아닌 유리수를 넣었을 때
정수가 아닌 유리수(ex: 4.5)를 넣으면 어떻게되나 궁금해서 넣어봤는데 그 유리수의 정수부분까지 더해진 다음 Sum 값을 뱉네요. 여기서 궁금한 점이 생겼습니다. 1. 이렇게 따로 작성해서 실행해봤는데 1.4 , 5.6 이런 정수가 아닌 숫자를 넣어도 값은 1이 나오는 이유가 무엇인가요? 정수에서만 1을 뱉는게 아닌건가요? int main() { int A, B; A = scanf("%d", &B); printf("%d", A); return 0; } ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 2. 1.4 , 5.6 과 같은 정수가 아닌 유리수들의 scanf 함수 리턴값도 1이었는데, 이번 강의에서 나오는 코드에 넣으면 왜 'while 함수가 끝나'고, '정수부분이 더해진 형태로' Sum값을 뱉는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
텍스트파일에서 영어 이외의 언어를 읽는법은?
제목이 곧 질문인데 한글이나 영어가 아닌 다른 외국어를 적었을 때에는 외계어처럼 변합니다. 강의를 끝까지 보면 영어가 아닌 언어도 읽는 법을 알 수 있나요??
- 미해결홍정모의 따라하며 배우는 C언어
(!isspace(c) && !line_flag) 트루??
if (!isspace(c) && !line_flag) { n_lines++; line_flag = true; }라는 문법이 빈칸이아니면서 라인플레그가 트루일때 if문이 실행되는데요. 질문은 두가지 입니다. 1. 위에서 라인플래그를 false 로 초기화를 했는데 어떻게 (!isspace(c) && !line_flag)문이 실행이 되나요? 2. if문 조건에서 !line_flag가 트루인데 다시 line_flag = true; 트루로 바꿔야하는 이유가 뭘까용? 우문에 현답을 부탁드릴게요 ..ㅠ
- 해결됨홍정모의 따라하며 배우는 C언어
[여러분의 궁금증] if ( ... && !line_flag) false? true??
// 질문 아님.. 문제가 있다면 덧글 남겨주세요~ Ⅰ. 개요 Ⅱ. 원인 Ⅲ. 결론 ---------------------------------------------------------- 안녕하세요. 강의 잘 듣고 있습니다. 이번 강의를 보는 중에 처음에는 너무 당연하게 생각했던 것과 다른 수강생분들의 질문을 보다보니, 저도 너무 헷갈린 나머지, 글을 남기고 싶어졌습니다. Ⅰ. 개요) !false는 true입니다. 반대로 !true == false가 되겠죠? line_flag = false로 초기화했다면, !line_flag는 true일 것입니다. 그렇다면 if (!line_flag)는 if (true)를 의미합니다***. 여기서! 오해의 원인) if (!line_flag)는 line_flag가 !false일 경우에만 if문을 실행하겠다는 의미로 기대하게 됩니다. (아직 모호하면 아랫 글 참고 ↓↓↓) ---------------------------------------------------------- Ⅱ. 문제 원인) 이제 예시를 보겠습니다. 예상하기로, if(!line_flag)는 line_flag가 true일 경우에 if문을 실행하겠다는 의미로, 바로 위에 line_flag = false라서 실행되지 않을 것이라 기대하게 됩니다. (위 코드는 printf함수가 출력이 됩니다) 마치! 위처럼 num이 1이라면 if문은 실행되지 않았을 겁니다. 한편 "num = 0;" 으로 대입을 했다면, num != 1에 만족하니 if문이 실행되겠죠. line_flag도 똑같이 생각한 것입니다. 다음 사진과 같이 생각한 것이죠. 이 때는 line_flag가 false로 초기화되어 있으니, if문도 실행되지 않겠죠. if문에 들어가기 전에 line_flag = true;로 설정값을 바꿔준다면 if문이 정상적으로 실행될 것입니다. line_flag = true; !line_flag; 1번과 2번은 엄연히 다른 개념입니다. 1번은 bool타입의 변수 line_flag에 true값을 넣어준 것이고, 2번은 true값을 가지고 있는 line_flag를 일시적으로, 그 때에만! 반대값인 false로 바꿔주는 것입니다. ---------------------------------------------------------- Ⅲ. 결론) 돌고돌아 간단합니다.. 개요에서 이미 답이 나왔죠? line_flag가 false인 상태입니다. !line_flag는 true를 의미합니다. 즉, if(!line_flag) == if(true)인 것입니다. 이미 쓰여있던 질문과 답변을 보았는데, 분위기가 마치 엄청 배고픈데, 햄버거 한 개밖에 못 먹은 분위기였어요.. 그래서 남겨보아요..
- 미해결홍정모의 따라하며 배우는 C언어
글자 세기에서 엔터값 빼는 예제 질문있습니다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<ctype.h> #include<stdbool.h> #include<iso646.h> #define PERIOD '.' int main() { char ch; int count = 0; while ((ch = getchar() != PERIOD)) { if (ch == '\n') count--; else count++; } printf("%d", count); return 0; } 선생님처럼 \n가 아닐때만 세라는 프로그램이아닌 \n이면 -1하고 아니면 +1하라라는 프로그램을 만들었는데 빌드값이 엔터를 포함해서 나오더라고요.. 어떤 부분에서 실수했는지 궁금합니다..
- 미해결홍정모의 따라하며 배우는 C언어
Expression에 세미콜론 질문
(사진)
- 미해결홍정모의 따라하며 배우는 C언어
autos 창 띄우기
안녕하세요 9.16 본강의 40초 부근을 보면, 디버깅시 밑에 Autos 창이 뜨는 걸 볼 수 있었는데요, 제가 이걸 껐는지 보이질 않습니다. 어디서 다시 켜줘야 하나요? *추가 1분 19초의 debug > windows > memory도 찾을 수가 없어요,, 인스톨러로 가서 뭘 더 다운 받아야 하나요?
- 미해결홍정모의 따라하며 배우는 C언어
배열크기 선언시 const int 로 된 값을 넣으면 안되나요?
안녕하세요. 혼자 다른 배열 예제를 풀어보다가 좀 이상한게 보여서 여쭙게 되었습니다. 이런식으로 코드 작성시 int a[10] 대신에, num을 10으로 고정시키고, int a[num]으로 선언을 해보았습니다. 그랬더니, 배열 a의 사이즈를 알 수 없다 라고 에러가 떳습니다. 그런데 조금 다르게 define 으로 넣어줘봤더니 에러가 사라지고 아무 문제없습니다. 뭐가 다른지 잘 모르겠습니다. const 로 할 때는 왜 안되는 건가요? (int a[num]에 대해 'a': unknown size라고 뜹니다.) *질문 답변 뒤에 괜히 인사말 남기면 또 알람이 가서 귀찮으실까 감사인사말 안달고 있는데, 정말 감사히 배우고 있습니다. 감사하다는 말씀 꼭 드리고 싶습니다.
- 미해결홍정모의 따라하며 배우는 C언어
자유공간과 힙의 메모리 할당에 관해 질문드립니다.
안녕하세요 선생님 제가 궁금하여 visual studio로 실험을 해보았는데, 메인 함수가 아닌 다른 함수에서 자유공간과 힙에서 동적할당을 할 때, 메모리 주소값이 초기화 되었습니다. 하지만 선생님이 말씀 하신 것처럼 주소 안에 들은 값은 초기화 되지 않았습니다. 그러면 이 주소 안에 들은 값은 우주 위에 둥둥 떠다니는 쓰레기가 되지 않을까? 궁금해서 질문 드립니다. 이름이 사라진 메모리의 주소가 할당 된 값을 찾아서 쓸 수 있는 건가요? 아니면 이 공간은 빈 공간처럼 나중에 재활용 이 되는 건가요? 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
제 실행화면과 강의가 다른 부분 질문이요!
안녕하세요! 이 화면의 하단부에 Autos Locals Watch 는 있는데 선생님처럼 Threads, Modules 탭이 없는 이유는 뭔가요? 코드는 전부 똑같이 짰습니다!
- 미해결홍정모의 따라하며 배우는 C언어
재귀함수를 직관적으로 생각해도 되나요?
함수스코프안에 함수스코프, 그안에 함수 스코프,,,를 호출하고, 제일 마지막으로 호출된 젤 작은 것부터 반환 그다음것 반환,,, 이런식으로 진행되면 직관적으로 보고 생각하기엔 조금 힘들것같다 느껴집니다. 그런데 팩토리얼 예제 (8분에 있는 코드)를 보니까 생각보다 직관적으로 보입니다. 그냥 0보다 클때까지 감소시켜가며 곱해라 이런식으로 말입니다. 그래서 궁금한게, 직관적으로 보게 되면 문제가 생길수 있나요? 아니면 그냥 직관적으로 사용해도 되나요? 추가)생각이 하나 더 들었습니다. 어차피 n은 이름만 같은 모두 다른 변수이니 그냥 직관적으로 사용해도 별 문제 없을 것 같은데, 이런 생각이 맞나요?