묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨홍정모의 따라하며 배우는 C언어
0.10 17:00 경 8비트 정수의 범위에 대한 질문
안녕하세요, 강의를 잘보고 잘 이해하고 있다고 생각하고 진행하고 있습니다만, 의문점이 생겼습니다.8비트 정수의 범위를 설명해주실 때부호가 있는(signed) 정수일 경우 범위를 -128 ~ 127로표현해주셨는데요.분명 128의 숫자는 2진수로 표현하였을 때 1000 0000이 맞습니다.이걸 알려주신 '2의 보수' 표현법으로 -128을 나타내면1000 0000 -> 0111 1111 이 되고 +1을 하면1000 0000가 됩니다만 앞선 설명에서는 첫번째 비트공간을음수,양수를 판별하기 위해 사용되는 자리라고 설명해주셔서그렇게 생각하고 있었습니다만 이렇게 될 경우8비트 이니까 128의 2진수인 1000 0000에서 맨앞에 1이 부호를 표현하는 자리이기 때문에 짤리고 000 0000 으로 표현되는 것 이 아닌가요?그렇게 되면 "부호가 있는 정수"의 범위일 경우000 0000 ~ 111 1111(127)이 된다는 건데 뭔가 이상하고그렇다고 1000 0000 을 -0으로 치부해 버리면0을 '2의 보수' 계산법을 통해 계산하였을 경우 똑같이-0 이나 0이나 같은 0000 0000 값이 나와서 이상하고그냥 -128의 경우 +128이나 -128이나 2진수가 같기 때문에 이럴경우는 1000 0000 일때 000 0000 이여도 -128로 정해둔 것 인가요? 아니면 다른 이유가 있을까요?
-
미해결홍정모의 따라하며 배우는 C언어
(2:49) 코드의 진행 방식이 머릿속에서 꼬여버려서 while문을 추가하였을 때, 정상적으로 출력되는 이유를 모르겠습니다.
디버그를 해보았는데도 이해가 되질 않아 질문을 올립니다.둘 다 실행했을 때, y입력 후 엔터를 쳤다고 가정하고제 나름대로 작동 순서를 글로 작성해보았습니다.1번째 코드 (while문, continue 없음)이것이 처음 작성한 코드입니다.ex) y 입력 후 엔터"Current count is 0. Continue? (y/n)" 출력 후 입력 대기→ y 입력 후 엔터if문에서 입력한 문자 'y'와 n을 비교한다. [검사]n이 아니므로 빠져나오지 않고 count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기→ (버퍼에 있던 \n)if문에서 입력한 문자 \n과 n을 검사하여 통과 [검사]count++실행"Current count is 2. Continue? (y/n)" 출력 후 입력 대기2번째 코드 (while문, continue 추가)이것이 두번째 작성한 코드입니다.ex) y 입력 후 엔터"Current count is 0. Continue? (y/n)" 출력 후 입력 대기→ y 입력 후 엔터if문에서 입력한 문자 'y'와 n을 비교한다. [검사]n이 아니므로 반복문(while(1))을 빠져나오지 않는다.while(2)문에서 y 검사(참) → continue 실행 [무시]while(2)문에서 \n 검사(거짓) → 빠져나옴count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기if문에서 입력한 문자 '\n'과 n을 비교한다. [검사]if문을 빠져나와 while문의 조건(거짓)을 만족시키지 못한다.count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기------------------------------1. 2번째 코드에서 while(2)문과 continue;의 조합으로 작성한 코드가 어째서 '첫번째 글자를 제외한 나머지를 버퍼에서 싹 지워주기 위함'인지 잘 모르겠습니다.결과적으로 while문-continue는 첫번째 글자 포함, 그 이후 글자까지 무시한 후 \n은 false이므로 아무 작용을 하지 못하는 것이 아닌가 싶습니다.→결국 2번째 반복(cycle)에서 버퍼에 남아있는 \n을 if문에서 판단하고, 결국 1번째 코드와 동일하게 작동하는 것이 아닌가요?
-
미해결홍정모의 따라하며 배우는 C언어
형식 지정자
int32_t를 출력할때 PRI32를 사용하는이유가 형식 지정자를 알수가 없다고했는데int32_t는 32비트를 사용하니까 4바이트이고 그러면 그냥 %d를 사용하면되는거 아닌가요?
-
미해결홍정모의 따라하며 배우는 C언어
size_t
sizeof 함수가 size_t를 반환한다는 소리가 무슨 말인가요?
-
미해결홍정모의 따라하며 배우는 C언어
int_least_t
이번 강의에서 배운 int_least8_t, int_fast_f 등등과 같은것들은 많이 사용되는 것들인가요?
-
미해결홍정모의 따라하며 배우는 C언어
sizeof 연산자 관련 질문입니다.
안녕하세요! 강의를 보면 1:48에 sizeof에 마우스를 갖다 대면 '4U(4 바이트)'라고 뜨는데, 저는 4Ui64라고 뜹니다. 뒤에 더 붙은 i64는 뭔지 궁금해요!
-
미해결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 문의하기를 이용해주세 한국어로 바꾸는방법이있을까요?