월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
변수에 값을 할당하기 전에 컴퓨터는 어떻게 계산을 하나요?
char ch; scanf("%hhd", &ch); printf("%i", ch); Overflow에 관한 질문이 있습니다. char 데이터는 -128 ~ 127까지 값을 사용할 수 있습니다. 이때 128 값을 할당하면 -128로 overflow 129 값을 할당하면 -127로 overflow 130 값을 할당하면 -126로 overflow가 됨이 신기했습니다. 왜냐하면 overflow된 값을 보간법으로 처리하는 방법을 모르기 때문에 출력값을 기준으로 컴퓨터가 어떻게 동작하고 있는지 추측해봐야 했습니다. binary 계산으로 보면 컴퓨터는 단순히 1을 계속하여 더하고 있을 뿐입니다. 부호| 값 0 | 111 1111 = 127 <= 127 1 | 000 0000 = -128 <= 128 1 | 000 0001 = -127 <= 129 1 | 000 0010 = -126 <= 130 질문입니다. 1) 그렇다면 컴퓨터가 int 타입의 16이란 숫자를 저장할 때도 0부터 계속해서 1을 더하여 16을 구하는 건가요? 컴퓨터가 데이터를 저장하기 전 계산하는 과정이 궁금해졌습니다! 2) int 타입은 그렇다고하면 float나 double같은 경우는 exponent와 fraction이 각각 나누어져 있기 때문에 실제 값을 계산하고 할당할 때 상당히 복잡한 과정이 있을 것 같습니다. 교수님이 알려주셔서 각 파트를 어떻게 계산하는지는 알고 있으나 컴퓨터가 이 과정을 어떻게 계산하고 처리하는지는 막상 상상이 되지 않습니다. c 언어가 상당히 저수준의 언어라고 생각해서 배우면 컴퓨터를 잘 이해할 수 있을 거 같았는데 뭔가 더 깊은게 많을 거 같네요 ㅠㅠ 도와주세여
- 해결됨홍정모의 따라하며 배우는 C언어
10:13 호출되는 함수 변수의 메모리할당 시점 질문입니다
10:13 호출되는 함수 변수의 메모리할당 시점 질문입니다 void func() { int l_arr[MAX] = { 0, }; } int l_arr[MAX] 가 컴파일 할때 할당되는건가요?문득 전에 main 이외에 함수들을 정의는 안한채로 선언만할수 있고그렇게하면 컴파일러에서는 에러는 안내지만 링킹할때 문제 생긴다고 하셨던게 떠 올라서이미 정의까지 되어있는 함수에 대해서는 메모리에 할당되는 시점이 컴파일 할때라고 이해하면 괜찮을까요?
- 미해결홍정모의 따라하며 배우는 C언어
11.6 강 strcat() 구현 중 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 11.6강 strcat() 함수 구현 중 질문드립니다. char * strcat_ptr(char* dest, const char* src) // strcat 구현하기 { char* temp = dest; // temp 포인터 주소를 dest 로 while (*temp) // temp가 가르키는 문자가 null 일때까지 반복 *질문사항 : *temp 를 *dest 로 바꾸면 무한루프가 되더라구요..ㅠㅠ 왜 그런지 모르겠어요.. { temp++; // temp 주소 하나씩 증가 } while (*src) // src가 가르키는 문자가 null 일때까지 반복 { *temp++ = *src++; // temp가 가르키는 주소에 src가 가르키는 문자로 변경 } temp = 0x00; // temp를 null 로 해줌. return dest; //dest 반환 }
- 미해결홍정모의 따라하며 배우는 C언어
컨트롤버스의 데이터이동방향
안녕하세요. 메모리는 address데이터를 받기만하고, Cpu는 보내기만하는것으로 알고있습니다. 따라서 8:40의 그림은 문제없어보입니다.(화살표 방향에대해) 그런데 제생각에는 control데이터도 메모리는 받기만하고 cpu는 보내기만 할것으로 생각되는데요. 그림의 화살표방향이 수정되어야 하는것 아니가 생각됩니다!!
- 미해결홍정모의 따라하며 배우는 C언어
교수님 도움을 요청합니다. 실행에 오류가 납니다.
#define _CRT_SECURE_NO_WARNISGS #include <stdio.h> #include <stdbool.h> int main() { //int temp; //temp = true ? 1024 : 7; // ternary //printf("%d\n", temp); //temp = false ? 1024 : 7; //printf("%d\n", temp); //int a = 1, b = 2; //int max = (a > b) ? a : b; int number; scanf("%d", &number); <-아래 오류줄이 생기면서 실생이 안됩니다. bool is_even; is_even = (number % 2 == 0) ? true : false; //if (number % 2 == 0) // is_even = true; //else // is_even = false; //bool is_even = (number % 2 == 0) ? printf("Even") : printf("Odd"); if (is_even) printf("even"); else printf("odd"); return 0; }
- 미해결홍정모의 따라하며 배우는 C언어
다음 코드가 무한루프 도는 이유
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void binary(int num); int main() { int n = 10; binary(n); } void binary(int num) { int remainder = num % 2; while(num > 1) { binary(num / 2); } printf("%d",remainder); return; } 이진수 변환을 구현해봤는데 무한루프를 도는 이유를 모르겠어서 질문합니다.
- 미해결홍정모의 따라하며 배우는 C언어
flags
printf("%-+i", 1234567); 이렇게 입력하는게 '왼쪽으로 정렬하고 기호를 붙여라' 라는 뜻이 맞나요??
- 미해결홍정모의 따라하며 배우는 C언어
underflow
-1을 %u에 넣으면 overflow가 아니라 underflow아닌가용??
- 해결됨홍정모의 따라하며 배우는 C언어
scanf("%d %d", &i1, &i2) != 2 의 의미
scanf("%d %d", &i1, &i2) != 2 이 코드가 의미하는 것이 무엇인지 모르겠습니다. 어떻게해서 그런 의미가 나오는지 이유까지 알려주시면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
for 문 증감연산자 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 듣다보니 선생님께서 for문을 사용하실 때 for( r = 0 ; ; ++r)처럼 전위증가연산자를 사용하시더라고요. for문을 사용할 때 전위증가 연산자와 후위 증가연산자 차이가 있는지 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
struct book* read_books 예제에서 쓰인 malloc()에 대해 질문합니다.
struct book* read_books(const char* filename, int* n) { FILE* fp; int count; char buffer[SLEN] = { '\0', }; struct book* books; if ((fp = fopen(filename, "r")) == NULL) { fprintf(stderr, "Can't open \"%s\" file.\n", filename); exit(EXIT_FAILURE); } fgets(buffer, SLEN, fp); for (int i = 0; i < SLEN; ++i) { if (buffer[i] == '\n') buffer[i] = '\0'; } count = atoi(buffer); *n = count; books = (struct book*)malloc(sizeof(struct book) * count); if (!books) { printf("Malloc failed"); exit(1); } for (int i = 0; i < count; ++i) { fgets(buffer, SLEN, fp); for (int i = 0; i < SLEN; ++i) { if (buffer[i] == '\n') buffer[i] = '\0'; } strcpy(books[i].name, buffer); fgets(buffer, SLEN, fp); for (int i = 0; i < SLEN; ++i) { if (buffer[i] == '\n') buffer[i] = '\0'; } strcpy(books[i].author, buffer); } fclose(fp); return books; } 제가 작성한 read_books 코드입니다. fscanf()도 %[^\n]%*c 가 사용되는지 몰라서 string.h을 이용해서 저렇게 작성을 하였는데빌드도 잘 되고 작동도 잘 되는데 strcpy(books[i].name, buffer); 에서 warning이 뜹니다. 정확히 C6385 Reading invalid data from 'books': the readable size is 'sizeof(book)*count' bytes, but '404' bytes may be read. 이렇게 뜨는데 코드를 바꿔가면서 알아보니깐 books = (struct book*)malloc(sizeof(struct book) * count); 이 부분에서count를 상수로 바꾸면 오류가 안 뜹니다. 또 교수님이 calloc()을 쓰시길래 calloc()으로 바꿨더니 상수로 바꿨을 때처럼 오류가 사라졌습니다. 그 이유가 궁금합니다. 또 교수님께서 calloc()에서 size_t _count부분에 size를 size_t _size부분에 count를 넣으셨는데 이 부분을 바꿔도동적할당된 힙 메모리를 가리키는 포인터를 배열처럼 사용하는데 전혀 문제가 발생하지 않는지, 또 그 이유는 무엇인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
파일정리
하나의 프로젝트에는 하나의 소스파일만 만들 수 있나요? 매 수업 동영상마다 하나의 소스파일을 만들어서 정리하고 싶은데 어떻게 해야하나요?
- 미해결홍정모의 따라하며 배우는 C언어
타이핑
교수님 유튜브에서 타이핑 동영상 봤습니다. 그럼 한컴타자에서 연습하라는데로 영타 연습하면되는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
const type
const type을 scanf 를 통해서 값을 대입하는 법 int main() { const int a; scanf("%c", &a); printf("%d", a); return 0; } 이때는 97이 나와야 정상인데 이상한 수가 나오고 int main() { const int a; scanf("%c", &a); printf("%c", a); return 0; } 이때는 정상적으로 a 가 출력된다 이유를 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
코드 질문입니다!
안녕하세요! 강의를 듣고 구현하던 중 질문이 생겨 글 올렸습니다. 교수님께서 작성하신 코드와 일치한다고 생각하는데 결과값이 다르게 나와서 혼란을 겪고있습니다. 아래에 제가 작성한 코드를 첨부하였습니다. #include <stdio.h> #include <ctype.h> #include <stdbool.h> #define STOP '.' int main() { char ch; int ch_count = 0, word_count = 0, line_count = 0; bool word_flag = false; bool line_flag = false; printf("Enter text: \n"); while ((ch = getchar()) != STOP) { if (isspace(ch)==false) ch_count++; if (isspace(ch) == false && line_flag == false) { line_count++; line_flag = true; } if(isspace(ch)==false && word_flag == false) word_count++; word_flag = true; if (ch == '\n') line_flag = false; if (ch == ' ') word_flag = false; } printf("ch_count = %d, word_count = %d, line_count = %d", ch_count,word_count, line_count); return 0; } ---------------------- 테스트 케이스는 아래와 같습니다. hello world abcde . -------------- (abcde 와 마침표 사이에 빈칸 有) 이에 저는 아래와 같은 출력을 얻었습니다. ch_count = 15, word_count = 2, line_count = 2 --------------------- 하지만 word_count는 3이 되어야 합니다 ..ㅠ_ㅠ 어디서 틀린걸까요?? + 디버깅을 하면서 알아내려하는데, 디버깅을 진행할 때 while ((ch = getchar()) != STOP) 에서 엔터를 치면 바로 while 문 안으로 들어가버립니다. hello world abcde . 을 입력해야 하는데, world 를 치고 엔터를 누르면 바로 if문으로 넘어갑니다.(디버깅할 때) 디버깅하지 않고 실행을 시키는 경우에는 해당 문제가 발생하지 않습니다... 혹시 왜 이렇게 되는걸까요..?? 항상 좋은 강의에 감사드리며, 건강하시길 바랍니다. 질문 조교님들도 학업과 병행하는 바쁜 일정 중에서 답변 다느라 너무 고생많으시고 감사드립니다. 감기 조심하시기 바랍니다 : )
- 미해결홍정모의 따라하며 배우는 C언어
int 질문입니다
안녕하세요. int는 정수형 정의로 알고있는데요, 강의 내용에서 보여주신 아래와 같은 코드에서 void say hello(void){ printf("hello"); return; } int main (){ say_hello(void); return 0; } 여기서 say_hello()함수는 문자를 출력하는 함수인데 int로 정의된 main함수 안에 들어갈 수 있나요..?
- 해결됨홍정모의 따라하며 배우는 C언어
바이너리 출력 오류관련 질문입니다.
안녕하세요. 프로그램 실행중에 무언가 오류가 생겨 질문 드립니다. 강사님께서 이번강의 후반부에 보여주신 제 컴퓨터에 작성하여 실행해보았습니다. 그런대 이게 컴퓨터 자체의 문제인지 코드 문제인지 도통 이해할수 없는 오류가 발생했습니다. void write_books(const char* filename, const struct book* books, int n) { FILE* fp = fopen(filename, "wb"); if (fp == NULL) { printf("Can't open file\n"); exit(1); } fwrite(&n, sizeof(n), 1, fp); fwrite(books, sizeof(struct book), n, fp); fclose(fp); } void read_books2(const char* filename, struct book** books_dptr, int* n) { FILE* fp = fopen(filename, "rb"); if (fp == NULL) { printf("Can't open file\n"); exit(1); } fread(n, sizeof(int), 1, fp); struct book* read_books = (struct book*)calloc(sizeof(struct book), *n); fread(read_books, sizeof(struct book), *n, fp); fclose(fp); *books_dptr = read_books; } 나머지 코드는 강의 내용과 같습니다. 그런데 이 코드를 실행해보면 이렇게 "The Great Gatsby"가 출력되지 않습니다. 가끔씩은 빈칸이 아니라 쓰레기값으로 추정되는 이상한 값이 출력되기도 했습니다. 디버그를 실행해보니 분명 read_books에 잘 들어간 "The Great Gatsby"가 *books_dptr에 read_books를 대입하니 왠 설명만 있고 없어져 있습니다. 이것이 도대체 무슨 현상인지 알수가 없습니다. 답변 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
12분 30초쯤 질문입니다
float arr2d[2][4] = { {1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f} }; float (*pa)[4]; // a SINGLE pointer to an array of 4 floats pa = arr2d; 위에서 pa는 an array of 4 floats를 가리키는 pointer라고 했는데 그러면 pa=arr2d[0]; 이 되어야 하는 건 아닌가요? pa가 어떻게 2d array인 arr2d를 가리킬 수 있게 되는지 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
read_books2 런타임 에러 질문입니다.
#include "Header.h" int main() { int temp; int n = 3; struct book* my_books = (struct book*)malloc(sizeof(struct book) * n); if (!my_books) { printf("Malloc failed\n"); exit(1); } my_books[0] = (struct book){ "The Great Gatsby","F. Scott Fitzgerald" }; my_books[1] = (struct book){ "Hamlet","William Shakespeare" }; my_books[2] = (struct book){ "The Odyssey","Homer" }; print_books(my_books, n); printf("\nWriting to a file.\n"); write_books("books.txt", my_books, n); free(my_books); // 1번째 free. n = 0; printf("Done.\n"); printf("\nPress any key to read data from a file.\n\n"); temp = _getch(); //my_books = read_books("books.txt", &n); read_books2("books.txt", &my_books, &n); print_books(my_books, n); free(my_books); // 2번째 free. n = 0; return 0; } void read_books2(const char* filename, struct book** books_dptr, int* n) // read_book와 같은 기능, 다른 구조 { FILE* fp = fopen(filename, "r"); if (fp == NULL) { printf("Can't open file\n"); exit(1); } fscanf(fp, "%d%*c", n); for (int i = 0; i < *n; ++i) fscanf(fp, "%[^\n]%*c%[^\n]%*c", (*books_dptr)[i].name, (*books_dptr)[i].author); fclose(fp); } 안녕하세요. read_books2 구현에 의문이 있어 질문 드립니다. 해당 코드는 제가 직접 작성한 코드로 read_books2 이외의 코드는 이상이 없고 강의 코드와 별 차이가 없어 생략했습니다. 해당 코드를 그대로 실행하면 런타임 에러가 발생합니다. 커뮤니티의 질문들을 살펴보고 실험해보니 2번째 free(my_books)가 이미 반환한 메모리를 또다시 반환하려해서 오류가 발생했다는것을 찾았습니다. 하지만 약간의 의문이 있습니다. 여러번 실험해본 결과 free(my_books)가 2번 중복되지 않고 1번만 실행되면 위치에 상관없이 오류가 발생하지 않았습니다. 그런데 2번째 free를 주석처리하고 1번째 free만 사용하는 경우 이미 반환된 my_books를 가지고 read_books2의 인수로 넣어 사용하는데 아무 오류가 없는 이유를 모르겠습니다. 답변 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
자료형 확인질문입니다
안녕하세요! 해당 코드에서 변수 ch의 자료형은 char로 받아도 잘 되고, 맥락상 char이 더 적절할 것 같은데 교수님은 int라고 작성하셔서 그 이유가 궁금합니다. char get_first_char(void) { int ch; ch = getchar(); while (getchar() != '\n') continue; return ch; }