월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 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; }
- 미해결홍정모의 따라하며 배우는 C언어
명령 프롬포트에 관해 질문이 있습니다(강의 8.3)
강의 8.3을 보면서 따라해보다가 잘 안되는 부분이 있습니다. 명령프롬포트에서 실행파일을 실행하기 위해 그 파일이 존재하는 directory로 가서, Lecture 8.3.exe 이렇게 실행시켜봤더니 (교수님 하신대로 따라해보았습니다) 다음과 같이 실행이 안됩니다. 그 이유가 궁금합니다.. 혹시 파일 경로 중에 한글이 있어서 그런건가요?
- 해결됨홍정모의 따라하며 배우는 C언어
scanf 함수의 시간측정
교수님의 강의에서 status = scanf("%d", &num); while (status == 1) { sum += num; printf("Enter a next integer (q to quit): "); status = scanf("%d", &num); } 이런식으로 된것을 판단식에 scanf 를 넣어서 코드를 간결하게 줄였는데, 이 경우 더 효율적으로 돌아 갈 것 같아서 #include <time.h> 를 통해서 시간측정을 해보려고 하니 scanf 함수를 받을때 제가 값을 입력하는데 걸리는 시간이 매번다르니 측정이 불가능 하였습니다. 방법이 있을 까요?
- 미해결홍정모의 따라하며 배우는 C언어
구조체 포인터 선언의 기억공간 할당 여부
구조체 설계 struct guy { char favfood[10], char job[10] }; 일 때는 기억공간을 아직 할당받지 않은 상태이고 구조체 변수 선언 혹은 선언 동시 초기화 할 때 메모리에 공간을 할당받는다고 이해했습니다. struct guy barney; 이 때 기억공간을 할당받는다 포인터는 새로운 구조체를 생성하지 않고 기존의 동일 구조체를 가리킨다고 하셨는데, 구조체 포인터 변수는 구조체 포인터 변수 선언 시 메모리에 공간을 할당 받나요? struct person* someone; [정리]구조체 포인터 변수의 메모리 할당 시점이 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
1.8 C언어와 함수 강의의 14:15 16:50 부분 질문있습니다.
안녕하세요. 강의 유익하게 잘 보고있습니다. 14:15, 16:50 부분 관련 질문있습니다. 14:15의 설명에서 return 뒤에 쓰이는 숫자가 exited with code 뒤에 출력으로 오는 것을 알 수 있고 16:50의 설명에서 int 와 7이 관련이 있다 하셔서 개인적으로 실험을 하나 해봤습니다. 강의의 코드를 float main() { return 7.7777; } 로 바꾸어서 실행하면 7.7777이 나올 것으로 생각했는데 실제 출력되는 숫자는 다른 숫자가 나옵니다. 혹시 return 함수가 실수형은 받지 않아서 이런 현상이 나타나는 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
object
data ovject를 설명하시는데 i = 1024;에서 i를 object라고 하셨는데, i = i + 1;에서 R-value로 사용되는 i 도 object 인지 여쭙니다.