월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
getchar()관련 자료형 질문
char get_first_char(void){ int ch; ch = getchar(); while (getchar() != '\n') continue; return ch;}이 코드에서 getchar()이 반환하는 자료형은 int이고 return 값으로는 char값인 것에 대해 궁금했는데요, ch = getchar(); 이 부분에서 getchar()이 입력받은 문자의 아스키 코드(int)를 반환하고 이를 return ch; 에서 ch가 입력받은 아스키코드에 대응하는 문자 char자료형으로 return한다고 생각하는데 맞나요?
- 미해결홍정모의 따라하며 배우는 C언어
터미널 관련 질문이 있습니다
Mac OS 에서 Visual Studio Code를 통해 c언어를 공부하고 있습니다. 기본 세팅은 다 맞췄는데 Run code를 하게 되면 항상 터미널에 결과가 나온 다음 사진처럼 %가 붙어서 나옵니다...이유가 뭔지 알 수 있을까요??
- 미해결홍정모의 따라하며 배우는 C언어
14.5 구조체 dot 선언 오류
구조체 선언할 때, dot을 사용해서 선언하면 아래와 같이 오류가 납니다!주석된 부분에서 오류가 나타나는 이유를 알고 싶습니다!! --------------------------------------------------------------------------------------------------#define CRT_SECURE_NO_WARNINGS#include <stdio.h>#define LEN 41struct names { char given[LEN]; char family[LEN];};struct reservation { struct names guest; struct names host; char food[LEN]; char place[LEN]; int year; int month; int day; int hours; int minutes;};int main(void){ //struct reservation res { // .guest = { "Nick", "Carraway" }, // .host = { "Jay", "Gatsby" }, // .place = { "the Gatsby mansion" }, // .food = { "Escargot" }, // .year = 2022, // .month = 4, // .day=10, // .hours = 18, // .minutes=30 //}; struct reservation res { { "Nick", "Carraway" }, { "Jay", "Gatsby" }, { "Escargot" }, { "the Gatsby mansion" }, 2022, 4, 10, 18, 30 }; printf("\Dear %s %s \n\I would like to serve you %s.\n\Please visit the Gatsby mansion on %d/%d/%d at %d:%d.\n\Sincerely, %s %s\n", res.guest.given, res.guest.family, res.food, res.day, res.month, res.year, res.hours, res.minutes, res.host.given, res.host.family); return 0;}
- 미해결홍정모의 따라하며 배우는 C언어
getchar() , 버퍼 질문
while (1) { printf("Current count is %d. Continue? (y/n)\n", count); int c = getchar(); if (c == 'n') break; else if (c == 'y') { while (getchar() != '\n') continue; count++; }이 코드에서 int c = getchar();에서 입력을 받고 버퍼에 저장된 후while (getchar() != '\n') continue; 이 코드를 통해 버퍼에 있는 문자가 하나 씩 반환 되면서 버퍼가 비워지고 다시 int c = getchar(); 을 통해 입력을 받는다고 이해했습니다. 우선 이 과정이 맞게 이해한 건지 궁금합니다. 그리고 또 궁금한 것은 하나의 프로그램에서 버퍼는 오직 하나만 존재하는 것인가요?
- 미해결홍정모의 따라하며 배우는 C언어
3.6 정수의 오버플로우 강의 중 _itoa 함수 오류
안녕하세요 선생님!강의를 따라하던 도중 itoa 함수에 오류가 떠서 질문드립니다.분명 선생님과 똑같이 친 것 같은데 왜 오류가 날까요??뭐가 문제일까요...????어떻게든 고쳐보려고 오류 나온 문구를 구글링 해보니까 itoa함수가 표준함수가 아니라서 오류가 난다는데...ㅜㅜ솔루션 보니깐 그냥 sprintf라는 함수를 사용하라 하더라구요.. 아니면 itoa 함수를 직접 정의하라던데 아직 걸음마 걷는 입장에서는 그 방법이 도저히 이해가 안가서..해결책이 궁금합니다ㅜ
- 미해결홍정모의 따라하며 배우는 C언어
vs code gcc
비주얼 스튜디오 코드 터미널에 gcc 입력하면 저렇게 뜨는데 해결방법이 있을까요...?
- 미해결홍정모의 따라하며 배우는 C언어
6.1 scanf 반환값
int main(){ int num = 0,red=0, sum = 0; int status; printf("Enter an integer (q to quit) :"); status= scanf("%d %d", &num, &red); while (status >= 1) { sum = sum + num + red; printf("Enter next integer (q to quit) : "); status = scanf("%d %d", &num, &red); } printf("Sum = %d", sum); return 0;}여기서 정수를 입력받은 변수의 갯수로 scanf의 반환값이 status라는 변수에 저장되는 것으로 이해했는데요 변수 num red에 각각 순서대로 1 2 / 3 4 / q 5를 넣으며 디버거로 확인해봤는데요. 세번째 scanf에 5라는 정수를 입력해서 status 값이 1이 나올거라 생각했는데 왜 status값이 0으로 나올까요? num에 숫자가 아닌 문자를 넣어서 red에도 영향을 주는건가요??/5 q 순서로 바꿔서 넣어봤을때는 status값이 1이 나와 4번째 scanf를 입력하려 했지만 그냥 그대로 끝이나고 sum도 4가 중복돼서 10과 19로 값이 다르더라고요. 문자를 입력하면 뒤에 변수에도 영향을 주는거 같은데 확실하지 않아서 질문드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
14.24 복잡한 선언을 해석하는 요령
작성된 코드문 주석 중, A function cna't return an array 라는 부분이 있고 바로 밑에 이 부분에 대한 예시로 주어진 코드가 int f(int)[]; // Wrong 입니다. 위의 말은 곧 '함수는 배열을 반환할 수 없다'는 것인데, 함수의 반환 자료형이라고 한다면 가장 앞에 붙는 것이지 않나요? 저 코드의 경우 배열을 나타내는 기호가 가장 뒤에 붙어 있는데 어떻게 저와 같은 모양이 '배열에 대한 반환'이 되는 건가요? 하나 더 궁금한 것은, typedef는 '다음에 오는 것을 그 다음에 오는 것으로 바꿔서 쓰겠다, ex. typedef xx xxx면 xx를 xxx로 쓰겠다'라는 생각하고 있었는데 typedef int* FCN(void); typedef FCN* FCN_PTR; typedef FCN_PTR FCN_PTR_ARRAY[10]; FCN_PTR_ARRAY x3;이 코드의 세 번째 줄을 보면 'FCN_PTR을 FCN_PTR_ARRAY[10]이라고 바꿔쓰겠다'라고 해석해야 옳지 않나요? 즉 [10]은 배열의 기능을 하는 것이 아닌, 그저 작성된 이름에 불과해야 하지 않나요?
- 미해결홍정모의 따라하며 배우는 C언어
5.4강 5분 쯤 질문있습니다!
while 문 안에서 fund를 %lf가 아닌 %f로 출력하는 이유가 궁금합니다..ㅠ
- 미해결홍정모의 따라하며 배우는 C언어
result 선언 질문
6.18 강의 중 3분 25초에 int result 를 1로 초기화 하셨는데, 강의에서 나온 코드와 똑같이 만들고 result를 0으로 초기화 하여 빌드했을때는 오류가 났지만 1로 초기화 했을 때에는 컴파일에 성공하였습니다.왜 result를 1로만 초기화 했을 때 컴파일 성공이 되는지 궁금합니다. 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
14.22 함수 포인터의 사용 방법
해당 강의에서 선생님께서 ToUpper 함수와 ToLower함수를 직접 만들어서 사용하시는 것을 볼 수 있는데요, 함수 안의 것들을 main함수로 그대로 가져가서 사용하려 할 때(char str[]을 char* str로 바꿔주고) 오류가 발생합니다 왜 그럴까요??
- 미해결홍정모의 따라하며 배우는 C언어
글자 자동완성...
vs code에서는 엔터 키로 글자 자동완성 기능 사용할 수 있었는데 vs에서 엔터 키로는 자동완성 기능 사용할 수 없더라구요... vs에서 탭 키 말고 엔터 키로 자동완성 할 수 있게 만드는 방법이 있을까요..??
- 미해결홍정모의 따라하며 배우는 C언어
7.8강 단어 세기 예제에서 flag의 논리값
7.8강 단어세기 예제에서 교수님께서 제시한 코드입니다.(word 개수 체크는 구현하지 않은 지점까지)두번째 if문에서 공백이 아니고 line_flag값이 true가 아니라면, n_lines의 값을 증가시키고 line_flag 값을 true로 바꿔주고 있고세번째 if문에서 개행문자라면 line_flag 값을 false로 바꿔주고 있습니다.다만 line_flag의 값이 true가 아닌 상황에서 n_lines의 값을 증가시킨다는 흐름이 직관적으로 와닿지 않아 다음과 같이 코드를 바꿔보았습니다.#include <stdio.h> #include <stdbool.h> #include <ctype.h> #define STOP '.' int main() { unsigned int n_char = 0, n_word = 0, n_line = 1; char ch; bool line_flag = false, word_flag = false; while ((ch = getchar()) != STOP) { if (!isspace(ch)) n_char++; if (!isspace(ch) && line_flag) { n_line++; line_flag = false; } if (ch == '\n') line_flag = true; } printf("c=%u, w=%u, l=%u\n", n_char, n_word, n_line); return 0; }flag에 해당하는 논리값을 반대로 뒤집은 코드입니다.line_flag 값이 true일 때 n_lines의 값을 증가시키는 것이 더 직관적이라고 생각했습니다.마찬가지로 개행문자를 만났을 때 line_flag 값을 true로 바꿔주는 것이 더 직관적으로 와닿는다고 생각했습니다.대신 n_lines는 1로 초기화했습니다. 일단 텍스트를 입력받는 순간 1줄이 될테니까요.(바로 .을 입력하여 종료시키는 경우는 예외처리를 추가적으로 구현할 필요가 있어보입니다.) +마찬가지 생각의 흐름으로 word 개수 카운팅하는 부분도 교수님께서 제시하는 word_flag의 논리값을 반대로 적용했습니다. 다만, 텍스트를 입력하는 순간 word가 시작된다고 가정하여 word_flag는 true로 초기화했다는 것이 line_flag와의 차이점입니다.#include <stdio.h> #include <stdbool.h> #include <ctype.h> #define STOP '.' int main() { unsigned int n_char = 0, n_word = 0, n_line = 1; char ch; bool line_flag = false, word_flag = true; while ((ch = getchar()) != STOP) { if (!isspace(ch)) n_char++; if (!isspace(ch) && line_flag) { n_line++; line_flag = false; } if (ch == '\n') line_flag = true; if (!isspace(ch) && word_flag) { n_word++; word_flag = false; } if (isspace(ch)) word_flag = true; } printf("c=%u, w=%u, l=%u\n", n_char, n_word, n_line); return 0; }제가 생각한 코드의 흐름에 대한 의견이나 비판 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
배열 const
const int NUM_DAYS = 365; char my_chars[] = "Hello World"; int daily_temperature[NUM_DAYS]; double stock_prices_history[NUM_DAYS]; printf("%zd\n", sizeof (stock_prices_history)); printf("%zd\n", sizeof (double) * NUM_DAYS); printf("%zd\n", sizeof(stock_prices_history[0])); xcode로 프로그램을 작성 하고있는데const는 런타임때 작동해서 오류가 뜬다고 하셨는데xcode에서는 왜 const로 배열선언이 되는건가용?
- 미해결홍정모의 따라하며 배우는 C언어
boolean
int True = 1;int False = 0;이렇게 안하고 boolean을 사용 하는 이유가정수인지 true, false인지 명확하게 구분 짓기 위해 boolean을 사용 한다고 하셨는데명확하게 구분 지으면 무슨 이점이 있는건가요??컴퓨터 안에서는 그냥 0 아니면 1로만 인식 하는거 아닌가요??
- 미해결홍정모의 따라하며 배우는 C언어
배열과 포인터
안녕하세요. 배열과 포인터에 대해 제대로 이해하였는지 확인 한 번만 부탁드립니다!! 1차원 배열의 경우1) 배열의 이름은 첫 번째 원소의 주소를 가리킨다. 2) 따라서 배열의 이름은 포인터처럼 사용할 수 있다. 3) 하지만, 포인터인 것은 아니다. 왜냐하면, 포인터는 첫번째 원소의 주소값을 가지는 변수로서 메모리에 적재되지만, 배열이름은 변수가 아니기 때문에 따로 메모리에 적재되지 않기 때문이다.4) 하지만, 포인터처럼 사용할 수 있기 때문에 역참조는 가능하다. 예를 들어, int a[4] = {1, 2, 3, 4}; 인 경우, *a == a[0] == 1 이다.2차원 배열의 경우1) 2차원 배열 또한 포인터처럼 사용할 수 있다. 2차원 배열의 이름은 배열의 첫번째 '열'의 주소를 저장한다. 2) 예를 들어, int array[2][3] = { {1, 2, 3}, {4, 5, 6}}; 인 경우, array == array[0] == &array[0] == *array이다. 왜냐하면(1) array는 array[0]을 가리키고, array[0]은 array[0][0]을 가리키기 때문이다.(2) 위의 세 가지는 같은 메모리를 사용하기 때문에 모두 주소가 같다.(3) array는 포인터처럼 사용되어 array[0]을 가리키기 때문에 *array는 array[0]의 주소가 된다. 3) array[0][0] == **array이다. 왜냐하면, array[0][0]은 값을 나타내는데, *(*array)에서 괄호 친 array는 array[0]의 주소를 의미하고, *(&array[0])는 array[0][0]을 의미하기 때문이다. 틀린 부분은 넘버링 한 부분을 참고하여 답변 해주시면 감사하겠습니다!! 항상 감사합니다~!
- 미해결홍정모의 따라하며 배우는 C언어
1.9강 컴파일러와 링커 부분에서 obj 파일
안녕하세요 선생님따라하면서 강의 듣는 중인데요,open containing 으로 열면 obj 파일이 없습니다..그리고 자체 debug 폴더도 없구요(따로 있는 debug 폴더는 있어요,,)뭐가 잘못된걸까요,,??
- 미해결홍정모의 따라하며 배우는 C언어
4.7강 \n 질문 드립니다!
4.7강 pritnf()함수의 변환지정자들 강의 9분쯤에, 문장이 길때는 줄바꿈을 하고 \n을 입력한다고 말씀하셨는데 실제로는 \만 입력하시더라구요, 이유가 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
_CRT_SECURE_NO_WARNINGS 오류 C6031
선생님께서 알려주신대로 속성 항목을 바꾸어보기도하고, 위에 define으로 정의도 하였는데도 동일한 오류가 계속해서 뜹니다ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
3.10 문자형 백스페이스 질문입니다!
강의 약 8분 18초 쯤, '\a'를 8진수와 16진수로 출력하는 과정에서 8진수앞에는 접두사 0을 붙혔는데 16진수앞에는 왜 x만 붙힌건가요..? 16진수 접두사는 0x라고 들었던것 같은데 직접해보니 '\0x7'은 그냥 7이 나오고 '\x7'은 백스페이스 소리가 나는 이유가 궁금합니다!