묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
scanf문 실행 순서 다름
(수정) - 엔터가 다 사라져서 저장이 됬네요;;안녕하세요, 코드는 하기와 같이 교수님과 똑같이 적었습니다. char str[255];int i, i2;double d;scanf("%s %d %lf\n", str, &i, &d); // hello 3 3.14printf("%s %d %f\n", str, i, d); scanf("%s %d %d\n", str, &i, &i2); // abc 1 1.23printf("%s %d %d\n", str, i, i2);그런데 실행 순서가 다릅니다. 강의 영상처럼 첫번째 scanf가 실행되고 바로 printf 가 실행된 후 두번째 scanf가 실행되는게 아니라, 한꺼번에 입력을 받고 한꺼번에 출력합니다... 뭐가 문제일까요? 디버거로 찍어봤는데 하기와 같습니다.release 모드로 돌렸는데 그거랑은 상관없겠죠..?
-
해결됨독하게 되새기는 C 프로그래밍
자료 구조 공부 후에
독하게 되 세기는 C를 들어야 하나요? 아니면 자료구조 공부 전에 독하게 되 세기는 c를 들어야 하나요? 어떤 걸 먼저 들어야 더 깊이 있게 이해가 되나요? 아니면 상관 없나요?
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
CLI UI적용 강의에서 질문드립니다.
강의 자료로는 잘 실행되는데 똑같이 복사 붙여넣기로 다른 솔루션에서 실행하려면 이렇게 오류가 뜹니다. 이유를 잘 모르겠어 질문드립니다..
-
미해결홍정모의 따라하며 배우는 C언어
3.1-6분
표에 나오는 십진수 정밀도란 무엇을 뜻하나요?
-
미해결홍정모의 따라하며 배우는 C언어
제가 이해한 것이 맞는지 긴가민가해요
int arr[2][3] = { {1,2,3},{4,5,6} };에서결과적으로 주소값은 모두 같겠지만 배열명 arr이 가르키는 것은 이차원 배열의 첫번째 행이고, arr[0]이 가르키는 것은 배열의 첫번째 행의 첫번째 원소가 맞나요?
-
해결됨홍정모의 따라하며 배우는 C언어
5분 41초경 7분 45초경 질문
여기서객체가 생기는 위치가 딱 고정되어 있냐 아니냐 그 기준으로 보시면 됩니다.이 부분이 잘 이해가 안되는데객체가 생기는 메모리의 위치가 객체가 고정되는 특징(데이터 또는 BSS segment의 특징?)을 가지고 있냐 아니냐이렇게 교수님 말씀을 이해해도 괜찮을까요? 그리고7분 45초 에서 교수님이 하시는 말씀의 순서가 좀 복잡해서 이해가 잘 안됬는데사실은 프로그래머들이 편리하도록 자동적으로 영역과 지속 기간을 관리해주는 성질을 가질 수 있게스택이란 공간을 만들고 거기에 저장을 하는 것이다.라고 제가 정리를 좀 해봤어요 이 정리가 맞는 표현인가요? 항상 좋은 답변 정말 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
12분 경 질문
여기서 i=3이라고 했을 때 printf에서 왜 2로 출력되는지 궁금합니다. 감소 연산자 시그널이 없어서 3으로 나와야 하는 것이 아닌 건가요?
-
미해결홍정모의 따라하며 배우는 C언어
10분 58초 경 질문
전위 연산자가 붙어있는 j에서 일단 증가를 시키고 대입한다고 하셨는데 그게 무슨 뜻인지 이해가 되지 않습니다.
-
해결됨Windows 시스템 프로그래밍 - 기본
이예제 파일 어디 있나요
파일을 못 찾겠어요
-
미해결홍정모의 따라하며 배우는 C언어
4분 33초 경에 질문이 있습니다.
&arr[0][0]은 그냥 주소값이지 포인터가 아니지 않나요? 너무 헷갈립니다..ㅠ주소값에다 정수를 더해서 너무 혼란스럽습니다... 이게 포인터면 +1을 하면 int 크기만큼 건너뛴다는건 알겠는데 저건 주소값인데 +1을 할 수 있는건가요?
-
미해결홍정모의 따라하며 배우는 C언어
scanf()가 잘못된 입력을 읽을 때 행동
안녕하세요,이 코드에서 'a 2 3 '을 입력 후 'b 4 5'를 입력하면, 두번째 while문이 돌아갈때 입력버퍼에 남아있는 ' \nb 4 5' 중 ' '는 c로 들어가고, 다음 %d를 읽으려 할때 '\n' 와 %d가 매칭되지 않아 scanf가 종료되고, rows와 cols는 기존 2 와 3이 유지되어 하기와 같이 결과가 나오는 것을 이해를 했습니다.핵심은 버퍼에 남아있는 ' \nb 4 5' 중 '\n'은 scanf가 읽다가 포기하고 버려졌다 라는 건데요,(이게 스트림이 옮겨졌다고 표현하는게 맞나요?) 이를 테스트하기 위해 하기와 같이 코드를 짜봤는데, 또 아닌 것 같아서요..만약 제가 깨달은게 사실이라면,제가 예상한 결과 ->이 코드를 실행시키고 입력창에 'hello'를 입력하고 엔터를 치는 순간 입력 버퍼에 'hello\n' 이 들어가게되고,첫번째 while문의 scanf() 가 실행될때 %d와 hello가 매칭되지 않으므로 scanf를 종료. scanf가 비정상적으로 종료되었으므로, 입력버퍼에 있는 'hello\n'에서 hello는 버려지고, \n으로 스트림이 옮겨짐. 두번째 while문 조건에서 c에는 \n이 저장되고, 조건문이 거짓이므로 바로 break;가 실행되어 종료됨.실제 결과 ->두번째 while문의 putchar까지 실행됨. 왜 차이가 발생한건지 궁금합니다.
-
해결됨홍정모의 따라하며 배우는 C언어
5분 35초경 질문
헤더파일 안에서 static으로 변수를 선언해줘도 되는 이유는C파일에서 그 헤더파일을 불러왔을 때그 C파일의 파일 스코프에서 static으로 변수를 선언 해주는 것과 같아서인가요?얘를 들어 #pragma oncestatic const double PI = 3.141592;static const double gravity = 9.8;이런 내용의 PIgravity.h라는 이름의 헤더 파일이 있고 main.c 파일에서#include "PIgravity.h"이렇게 해주면main.c 파일의 파일 스코프에static const double PI = 3.141592;static const double gravity = 9.8;이렇게 선언된 것과 비슷한 거라서 가능한건가요?
-
해결됨Windows 시스템 프로그래밍 - 기본
응용편에서는 어떤 내용이 들어가나요?
강의 완강했습니다. 응용편에서는 어떤 내용이 들어가는지 알 수 있을까요?
-
해결됨홍정모의 따라하며 배우는 C언어
realloc() 함수 질문이 있습니다.
int* ptr = NULL;ptr = (int*)calloc(n, sizeof(int)); // contiguous allocation if (!ptr) exit(1); for (int i = 0; i < n; ++i) printf("%d ", ptr[i]);printf("\n"); for (int i = 0; i < n; ++i) ptr[i] = i + 1; n = 20; int* ptr2 = NULL;ptr2 = (int*)realloc(ptr, n * sizeof(int)); realloc() 함수에서 메모리를 새로 할당 해줄 수 없을 경우 NULL 값을 반환해준다고 했는데그 때 원래 있던 ptr은 어떻게 되는 건가요? 그대로 남아있는 건가요 아니면 free를 한 상태가 되는 것 인가요?realloc() 함수는 원래 있던 포인터에 대한 할당 받은 메모리 공간은 free를 한 상태로 바꿔준다고 했는데이렇게 NULL 값을 반환해 줄 때도 원래 있던 메모리 공간을 free한 상태로 바꿔주는 건지 궁금해서요 항상 좋은 답변 감사합니다.
-
해결됨독하게 시작하는 C 프로그래밍
달팽이 숙제 이렇게 풀면 의도와 다를까요?
안녕하세요 강의 재밌게 잘 보고있는 1인입니다~숙제 설명듣기전에 풀어봐야겠다고 해서 3시간 걸려 풀었습니다. 설명듣고나니 방법이 좀 다른거같은데, 의도에 좀 벗어난 것일까요? 또한 포문마다 조건이 달라 이해하기 더 어려운 코드가 된건 아닌지에 대해서도 널널한개발자님의 의견이 궁금합니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
SearchToRemove와 RemoveNode가 분리되어야 할 필요가 있을까요?
RemoveNode를 직접 먼저 구현한 후 강의를 듣게 되었는데요,저는 RemoveNode 안에 Search하는 코드를 통합해서 짰는데 SearchToRemove가 RemoveNode를 실행시키기 위해서만 필요하다면 굳이 분리를 해야 할까 하는 의문이 들었습니다.하나의 함수는 하나의 동작만 실행해야 해서 분리가 된 것일까요? 아니면 SearchToRemove가 나중에도 사용이 될 가능성이 있어서 분리된 것일까요?제가 작성한 코드를 첨부합니다. void RemoveNode(const char* pszName) { USERDATA* pTmp = g_pHeadNode; USERDATA* previousNode = NULL; bool isFound = false; // 노드 찾기 while (pTmp != NULL) { if (strcmp(pTmp->name, pszName) == 0) { isFound = true; break; } previousNode = pTmp; pTmp = pTmp->pNext; } // 노드 찾기 실패 if (isFound == false) { printf("\"%s\" : Not Found, remove failed.\n", pszName); return; } // 헤드인 경우 if (g_pHeadNode == pTmp) { g_pHeadNode = pTmp->pNext; free(pTmp); printf("\"%s\" : Found, remove successed.\n", pszName); return; } // 헤드가 아닌경우 previousNode->pNext = pTmp->pNext; free(pTmp); printf("\"%s\" : Found, remove successed\n", pszName); }
-
해결됨독하게 시작하는 C 프로그래밍
(섹션13- 교차와 달팽이숙제) 교차 예시 관련해 오설명있는 거 같습니다.
C공부 시작하고 강의 정말 재밌게 듣고 있는 수강자입니다~영상 9분 34초입니다.교차 예상 결과값 아래이지만1 2 3 4 510 9 8 7 6 ....강의에선 아래와 같이 값이 나왔습니다.1 4 3 2 510 7 8 9 6 ... flag를 이중 반복문 안쪽에 기입해서 생긴 오류였던거 같습니다.다른 분들 헷갈리지 않으시길 바라며 남겨봅니다.오류가 맞나요? 아니면 제 오해인지요?확인해주시면 정말 감사하겠습니다~
-
미해결홍정모의 따라하며 배우는 C언어
_getche() 엔터키 입력시 커서가 맨 앞으로 돌아가는 이유
안녕하세요,abc 입력하면이렇게 a에서 깜박깜박 다음 신호 입력을 대기하는 상태가 되는데요, 그 이유를 추측해봤습니다.1, _getche 는 엔터키를 만나면 '\r' 을 반환. getchar()는 '\n' 을 반환.2, '\r' 는 carriage return, 캐리지 리턴이라고 해서 커서를 현재 줄의 맨 앞으로 이동시킴. '\n' 은 new lien, 이 문자는 커서를 다음 줄로 이동시킴.3, 따라서 abc를 입력하고 엔터키를 누르는 순간 putchar('\n')가 아닌 putchar('\r') 가 실행되어 커서가 맨 앞으로 이동.4, 종료조건인 ch != '\r' 에 해당되지도 않으므로 (ch는 '\t') while문이 종료되지 않고 다음 입력을 기다림. 맞나요?? 디버거 찍어보니까 ch가 '\r' 이더라구요 '\n'일줄 알았는데 -_-;; 시간 날린거같아서 짜증납니다ㅠ
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
05_adtFileIO 프로젝트 문의
안녕하세요. 선생님! 소스 보다가 하나 발견한 부분 공유드립니다.프로젝트이름: 05_adtFileIO소스파일: singleList.c함수명: SearchListByName Q. 해당 함수는 Key값으로 조회하여 데이터를 로드하는 함수입니다.현재는 파일에서 매번 로드하도록 되어있는데캐싱된 데이터(pDataCache)가 있다면, 파일에서 읽어올 필요가 없을것 같아 문의드립니다.추가로 테스트 해보니Search(Kim) > Edit 0 > 수정완료 > Commit X > Search(Kim) 를 하면Edit에서 수정했던 데이터가 없어지는 현상이 있습니다.이미지의 흰 네모안의 로직(주석포함)은 추가해본 부분 입니다.
-
해결됨홍정모의 따라하며 배우는 C언어
defining declaration이 뭔지 이해가 안됩니다.
전 강의에서도 교수님이 직접적으로 설명을 해주진 않으신 것 같은데그래서 그런지 이게 정확히 뭔지 감이 안 잡히네요. 좀 알려주세요! 항상 좋은 답변 감사합니다.