묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
질문드립니다
숫자를 입력하면 빙고! 이후에도 숫자에는 동물의 이름이 들어가지 않습니다 ㅠ
-
미해결홍정모의 따라하며 배우는 C언어
맥 os 에서의 vscode
안녕하십니까 교수님 다름이 아니라 맥북으로 비주얼 스튜디오 코드를 이용해 c언어를 익히고 싶은데 초기설정에서 계속 헤매고 있습니다. 혹시 관련 자료가 있다면 알려주시면 감사할것 같습니다
-
미해결홍정모의 따라하며 배우는 C언어
2:46 getchar 질문
yes \n 를 쳤다고 하면 if문에서 y일 때, n이 아니니 while문으로 넘어가고 여기에서 y는 \n와 다르므로 다시 while문으로 갈테고, 이와 같이 e s도 \n와 다른데 마지막 \n == \n이니 count++로 넘어가서다시 출력 되는거라고 생각됩니다. 그런데 두번째 문자인 e에 대해서는 다시 if문에서 부터 루프를 돌리지 않아도 되는건가요?
-
해결됨홍정모의 따라하며 배우는 C언어
[(16. 전처리기와 라이브러리) - 11. inline 함수] inline function의 assembly code질문 (강의 10분 18초)
안녕하세요. inline function의 assembly code에 call 이 나오는 문제 때문에 질문드립니다! 현재 visual studio 2022 community 최신 버전을 사용하고 잇습니다. 또한, 해당 강의대로 inline function expansion을 only _inline 으로 설정했습니다. 하지만 assembly code를 보면, inline function expansion을 disable 했을 때와 차이가 없습니다. Visual Studio 2019 Community에서도 그러합니다. 작성한 code는 강의대로, 아래와 같습니다. #include <stdio.h> inline int foo() { return 5; } // Driver Code int main() { int ret; // Inline Function Call ret = foo(); // Breakpoint printf("Output = %d\n", ret); return 0; } 어떻게 해야 강의의 10:18 에서와 같이, assembly code로 봤을 때, foo()의 function call없이, mov dword ptr [ret],5만 확인할 수 있을까요?
-
미해결
서울시뉴딜일자리_IT인턴 3개월 [급여월260만]지원사업안내_빅데이터 기반 서비스플랫폼 과정 [스터디,프로젝트,프론트엔드,백엔드,자바,코딩]
서울시에서 뉴딜일자리사업 일환으로 2차 서비스플랫폼개발자 양성과정으로 사전 교육 후 3개월 인턴십 (급여 월 260) 보내주는 프로그램 진행중인데 신청해보세요! 자세한 내용은 https://blog.naver.com/kjc_sh/222775806456 참고해주세요
-
해결됨홍정모의 따라하며 배우는 C언어
[(15. Bit Manipulation) - 8. RGBA 색상 비트 마스크 연습문제] Alpha의 값이 255일 때, float로 왜 1.0인가요?
강의 2분 50초부터 2분 55초 구간에 'float로 변환하면, 1.0이 될겁니다.'라고 하셨습니다. 각각의 color channel에 대한 data type은 unsigned char이므로, 8 bits의 size를 가지고 있습니다. 그러므로 만약 '255'라는 10진수를 저장한다면, binary data는 1111 1111 입니다. 그런데 이 binary data가, 어떻게 float type의 '1.0'을 의미하는 것인지 모르겠습니다. 32 bits size를 가지는 float type으로 casting하면, 0000 .... 1111 1111 (32bits) 이므로 '255.0'이 나옵니다. 혹시 8-bit 부동소수점 숫자로 표현한다는 것을 말씀하신것인가 싶어서, 1111 1111 라는 binary data를 8-bit 부동소수점 수로 직접 계산해보니 -1 * 16 * 1.9375 = -31이 나옵니다. (Format : Sign 1 bit, Exponent 3 bits, Fraction 4 bits) 어떤 과정으로 인해서 alpha channel의 data인 '255', 즉 binary data 1111 1111 이 '1.0'이되는 것인가요?
-
해결됨홍정모의 따라하며 배우는 C언어
프로그램이 파일의 EOF를 어떻게 찾나요?
챕터 8.9 10:30 안녕하세요~ 강의 잘 듣고 있는 중에 궁금한게 있어서 질문합니다! while (( c = getc(file)) != EOF) 17번째 줄 코드인데요. 코드 뜻은 파일 내용 중 EOF를 만날 때까지 문자 한 개씩 변수 c에 대입이잖아요? 근데 텍스트 파일에 EOF를 적어주지도 않았고, 보이지도 않는데 어떻게 프로그램이 EOF를 인식할 수 있는건가요?
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
scanf_s(" %d", &answer); 이후 바로 종료
이후 printf로 정답, 오답 여부가 안나오는데 뭐가 문제일까요? 검색으로 입력버퍼도 찾아봤는데 해결이 안되네요.
-
해결됨리눅스 시스템 프로그래밍 - 이론과 실습
파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님. 좋은 강의 잘 듣고 있습니다. 다름이 아니라 "파일 이벤트 - 라이브 프로그래밍" 에서 질문이 있습니다. 라이브 코딩을 해주시는 중에 파일 생성 삭제에 대한 이벤트 로그 출력 부분을 작성 해주셨는데요. inotify_event 포인터로 선언되어있는 event 변수를 (char *)로 캐스팅 하는 이유에 대해서 문의 드립니다. 해당 부분의 소스는 아래와 같습니다. 감사합니다. while(ret > 0){ if(event->mask & IN_CREATE) { printf("file %s is created\n",event->name); } if(event->mask & IN_DELETE){ printf("file %s is deleted\n",event->name); } ret -= (sizeof(struct inotify_event) + event->len); event = (struct inotify_event *)((char *)event + sizeof(struct inotify_event) + event->len); <-- (char *)? }
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
질문 드립니다.
안녕하세요. 8번째 챕터 진행했는데, 컴파일 에러는 뜨지 않지만 이상하게 코드가 안 돌아가서 질문 드립니다. (참고로 비주얼 스튜디오가 깔리지 않아서, DEV-C++로 하고 있어 scanf_s가 아닌 scanf로 작성하고 있습니다) #include <stdio.h> #include <time.h> #include <iostream> #include <stdlib.h> #include <string> // 10마리의 서로 다른 동물 (각 카드 2장씩) // 사용자로부터 2개의 입력값을 받아서 -> 같은 동물 찾으면 카드 뒤집기 // 모든 동물 쌍을 찾으면 게임 종료 // 총 실패 횟수 알려주기 int arrayAnimal[4][5]; // 카드 지도 (20장의 카드) int checkAnimal[4][5]; // 뒤집혔는지 여부 확인 int foundAllAnimals(); const char * strAnimal[10]; void initAnimalArray(); void initAnimalName(); void shuffleAnimal(); int getEmptyPosition(); int conv_pos_x(int x); int conv_pos_y(int y); void printAnimals(); void printQuestion(); int main(void) { srand(time(NULL)); initAnimalArray(); initAnimalName(); shuffleAnimal(); int failCount = 0; // 실패 횟수 while (1) { int select1 = 0; //사용자가 선택한 처음 수 int select2 = 0; //사용자가 선택한 두번째 수 printAnimals(); // 동물 위치 출력 printQuestion(); // 문제 출력 (카드 지도) printf("뒤집을 카드를 2개 고르세요 : "); scanf("%d %d" , &select1, &select2); if (select1 == select2) // 같은 카드 선택 시 무효 continue; // 좌표에 해당하는 카드를 뒤집어 보고 같은지 안같은지 확인 // 정수 좌표를 (x,y) 로 변환 int firstSelect_x = conv_pos_x(select1); int firstSelect_y = conv_pos_y(select1); int secondSelect_x = conv_pos_x(select2); int secondSelect_y = conv_pos_y(select2); // 같은 동물인 경우 if((checkAnimal[firstSelect_x][firstSelect_y] == 0 //카드가 뒤집히지 않았는지 && checkAnimal[secondSelect_x][secondSelect_y] == 0) && (arrayAnimal[firstSelect_x][firstSelect_y] == arrayAnimal[secondSelect_x][secondSelect_y]) ) //두 동물이 같은지 { printf("\n\n빙고! : %s 발견\n\n" , strAnimal[arrayAnimal[firstSelect_x][firstSelect_y]]); checkAnimal[firstSelect_x][firstSelect_y] = 1; checkAnimal[secondSelect_x][secondSelect_y] = 1; } // 다른 동물인 경우 else { printf("\n\n 땡!! (틀렸거나 이미 뒤집힌 카드입니다)) \n"); printf("%d : %s\n" , select1 , strAnimal[arrayAnimal[firstSelect_x][firstSelect_y]]); printf("%d : %s\n" , select2 , strAnimal[arrayAnimal[secondSelect_x][secondSelect_y]]); printf("\n\n"); failCount++; } // 모든 동물을 찾았는지 여부, 1 : 참, 0 : 거짓 if (foundAllAnimals() == 1) { printf("\n\n 축하합니다 ! 모든 동물을 다 찾았네요 \n"); printf("지금까지 총 %d 번 실수하였습니다\n" , failCount); break; } } return 0; } void initAnimalArray() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; i++) { arrayAnimal[i][j] = -1; } } } void initAnimalName() { strAnimal[0] = "원숭이"; strAnimal[1] = "하마"; strAnimal[2] = "강아지"; strAnimal[3] = "고양이"; strAnimal[4] = "돼지"; strAnimal[5] = "코끼리"; strAnimal[6] = "기린"; strAnimal[7] = "낙타"; strAnimal[8] = "타조"; strAnimal[9] = "호랑이"; } void shuffleAnimal() { // □□□□□ // □□□□□ // □□□□□ // □□□□□ for (int i = 0; i < 10; i++) { for (int j = 0; j < 2; j++) { int pos = getEmptyPosition(); int x = conv_pos_x(pos); int y = conv_pos_y(pos); arrayAnimal[x][y] = i; } } } // 좌표에서 빈 공간 찾기 int getEmptyPosition() { // □□□□□ 0 1 2 3 4 -> 0 0 0 0 0 // □□□□□ 5 6 7 8 9 -> 1 1 1 1 1 // □□□□□ 10 11 12 13 14 -> 2 2 2 2 2 // □□□□□ 15 16 17 18 19 -> 3 3 3 3 3 while (1) { int randPos = rand() % 20; // 0 ~ 19 사이의 숫자 반환 // 19 -> (3,4) int x = conv_pos_x(randPos); int y = conv_pos_y(randPos); if (arrayAnimal[x][y] == -1) { return randPos; } } return 0; } int conv_pos_x(int x) { // 19 -> (3,4) return x / 5; } int conv_pos_y(int y) { // 19 -> 19 / 5 ? 몫은 3, 나머지 4 return y % 5; // y를 5로 나눈 나머지 값 } void printAnimals() // 동물 위치 출력 { printf("\n===== 이건 비밀인데.. 몰래 보여줍니다===\n\n"); for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { printf("%8s" , strAnimal[arrayAnimal[i][j]]); } printf("\n"); } printf("\n=======================================\n\n"); } void printQuestion() // 문제 출력 (카드 지도) { printf("\n\n(문제)\n"); int seq = 0; // seq // checkAnimal // □□□□□ 0 1 2 3 4 0 0 0 0 0 // □□□□ 하마 6 7 8 9 1 0 0 0 0 // □□□□□ 10 11 12 하마 14 0 0 0 1 0 // □□□□□ 15 16 17 18 19 0 0 0 0 0 for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { // 카드를 뒤집어서 정답을 맞혔으면 '동물 이름' if (checkAnimal[i][j] != 0) { printf("%8s" , strAnimal[arrayAnimal[i][j]]); } // 아직 카드를 뒤집지 못했으면 (정답을 못맞혔으면) 뒷면 -> 위치를 나타내는 숫자 else { printf("%8d" , seq); } } } } int foundAllAnimals() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { if (checkAnimal[i][j] == 0) { return 0; } } } return 1; // 모두 다 찾음 } 다음과 같이 작성했고, 컴파일시 에러는 뜨지 않지만 돌려볼 시 -------------------------------- Process exited after 3.839 seconds with return value 3221225725 계속하려면 아무 키나 누르십시오 . . .라고 나옵니다. 왜 이러는 걸까요?
-
해결됨홍정모의 따라하며 배우는 C언어
텍스트 파일 입출력 예제에서 텍스트 파일을 못찾는 것 같아요,,
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { int ch; FILE* fr; unsigned long count = 0; if (argc != 2) { printf("Usage : %s filename\n", argv[0]); exit(EXIT_FAILURE); } if ((fr = fopen(argv[1], "r")) == NULL); { printf("Can't open %s\n", argv[1]); exit(EXIT_FAILURE); } while ((ch = fgetc(fr)) != EOF) { fputc(ch, stdout); count++; } fclose(fr); printf("FILE %s has %lu characters\n", argv[1], count); return 0; } 코드도 맞게 작성했고 파일 이름이랑 다 맞게 했는데 이렇게 나오네요. . . , , , , , , ,ㅠㅠ 문제가 뭘까요....?! 크아악
-
미해결홍정모의 따라하며 배우는 C언어
15:00 부근에서 &parr[0]와 parr[0]가 왜 다른지 이해가 안됩니다.
arr = arr[0] = &arr[0] = &arr[0][0] = parr[0]인건 알겠습니다. 그런데 똑같은 배열형태인데 &parr[0]와 parr[0]가 왜 다른지는 이해를 못하겠습니다. 15:30에서 강의에서는 이에 대한 자세한 이유를 알려주기 힘드니 10.1강의와 10.12강의를 보고 오라고 하셨지만 여기를 봐도 이곳에선 배열을 가지고 이중포인터를 소개하는게 아니고 int형 변수를 가지고만 설명을 해서 아무리 봐도 10.13의 15:00 부분이 잘 이해가 안됩니다.
-
미해결홍정모의 따라하며 배우는 C언어
기호상수 관련해서
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. #include <stdio.h> #define TAX_RATE 0.2 int main() { const int MONTHS = 12; int m_salary, y_salary; printf("월급을 입력하시오 : "); scanf("%d", &m_salary); y_salary = MONTHS * m_salary; printf("연봉은 %d입니다.\n", y_salary); printf("세금은 %f입니다.", y_salary * TAX_RATE); return 0; } 연봉과 세금에 관한 코딩입니다. printf("세금은 %f입니다.", y_salary * TAX_RATE);에서 double이나 float같은 실수형자료형을 쓰지않았음에도 %f로 썼는데 됬습니다. 이유를 알수있을까요?
-
미해결홍정모의 따라하며 배우는 C언어
한국어 설정
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세 한국어로 바꾸는방법이있을까요?
-
미해결홍정모의 따라하며 배우는 C언어
혹시 자막은 사용못하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결홍정모의 따라하며 배우는 C언어
exception throw
9:34 에 나오는 코드를 따라했는데 다음 화면처럼 오류가 뜨고 실행이 되지 않았는데요 제가 다른 분 질문보고 혹시 이건가 해서 고쳤더니 해결되었습니다. (malloc이 <stdlib.h> 에 정의되어 있는데 이것을 include 하지 않아서 였습니다. ) 그런데 강의화면의 경우 <stdlib.h>를 쓰지 않고도 실행이 잘되는데 <stdlib.h>가 뭔가 세부내용이 바뀌어서 그런 건가요? 그리고 이번에는 다행히 잘 해결된 상황이긴 하지만 제 화면에서처럼 저러한 exception throw 오류가 뜨면 저것을 보고 'malloc이 정의가 안 되어있구나' 라고 어떻게 생각해야 하나요? malloc에 빨간 줄이 쳐진 것도 아니고 오류를 어떻게 해결해야 했던 건지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
size_t %zu사용
5:58 에서 size_t 에 해당하는 형식 지정자가 %zu라고 하셨는데 6: 42쯤 나오는 코드 34,35 번째 줄에는 왜 %zu가 쓰인 건가요? size_t를 사용하지 않은 코드인데도 %zu를 쓴 이유가 궁금합니다. 16:27에 나오는 코드에서도 size_t를 사용하지 않았는데 50번째 줄에서도 %zu를 사용하는데요 size_t라는 자료형을 선언해야만 출력할 때 %zu를 쓸 수 있는 것 아닌가요?
-
해결됨홍정모의 따라하며 배우는 C언어
메모리의 '첫 번째 주소' 및 byte 단위 메모리 공간의 저장 순서에 대한 질문
'9.17 포인터 변수의 크기' 강의를 보고, 의문이 생겨 질문 드립니다. 예를 들어, 다음과 같은 코드가 있습니다. int a = 4; float b = 4.0f; double c = 5.0; int *ptr_a = &a; float *ptr_b = &b; double *ptr_c = &c; Q1. 포인터 변수(ptr_a)가 변수(a)에 대하여 저장하는 첫 번째 주소란, 그 변수(a)가 memory에 저장될 때, 가장 마지막에 저장되는 1 byte 메모리 공간의 주소를 의미하는 것이 맞나요? Stack memory에 data가 저장될 때에는 High address로부터 Low address방향으로 저장된다고 알고 있습니다. 포인터는, 변수가 접근하는 메모리 공간의 첫 번째 주소를 저장하는데, 여기서 Memory를 살펴본 바, 첫 번째 주소란, 변수(a)가 stack에 저장될 때, 마지막으로 저장된 1 byte 메모리 공간으로 이해됩니다. 그리고가장 먼저 저장된 변수인 a의 주소는 b, c보다 높은 주소에 위치하고,b의 주소는 c보다 높은 주소에 있습니다. 그렇다면, 변수(a)의 4 byte짜리 메모리 공간들에 대해서도 저장될 때, 가장 먼저 저장되는 메모리 공간은 나머지에 비해 높은 주소에 위치한다고 추론할 수 있습니다. 그러므로 포인터가 저장하고 있는 주소값, 즉 그 변수(a)의 첫 번째 주소란, 가장 마지막에 저장되는 1 byte 크기의 메모리 공간이라고 이해하고 있습니다. Q2. x64에서 debugging을 실행할 때, 가장 나중에 저장되는 변수가 가장 높은 주소를 가지고 있는데, 왜 그렇습니까? x86으로 실행했을 때와 마찬가지로, stack에 쌓이는 메모리 공간들의 주소는 from high to low이어야 한다고 알고 있습니다. x64로 디버깅을 해보니, 먼저 저장되는 변수 자체의 메모리 공간이 저장되는 순서는 high to low 순으로 주소를 가지지만, 각 변수의 첫 번째 주소를 참고해보면, 이상한 점이 있습니다. 가장 마지막에 저장된 변수 c가 가장 높은 주소값을 가지고 있다는 것입니다. stack에 저장되는 메모리들의 주소는 가장 높은 메모리 주소부터 낮은 메모리 주소의 방향으로 저장되는데, 여기서는 x86 환경에서 memory 확인했을 때와 달리 정반대입니다. 왜 그럴까요?
-
미해결C로 배우는 자료구조 및 여러가지 예제 실습
학습 자료 pdf 파일에 관해서
안녕하세요. 얼마 전 부터 수강하게된 학생입니다. 다름이 아니라, 학습 자료가 올라와있는 링크가 있었는데 최근들어 접속이 안돼서 자료를 받지 못하고 있습니다. 혹시 자료를 받을 수 있는 다른 곳은 없을까요?
-
미해결홍정모의 따라하며 배우는 C언어
/ 이거 말고 왼쪽위에서 아래로 내려오는 모양 어딨어요?
키보드에서 안보인뒝 `이거 닯았는데 좀 길게 생김;;