8분 8초에서 feof() 함수는 EOF를 만났는가 물어봐요 라고 하시고 8분 16초에서 근데 지금 깔끔하게 저장된 개수만큼 왔기 때문에 EOF를 만나지 않은 상태에요 라고 하시는데 EOF를 만났는가 물어본다는 말에서 어떤게 EOF를 만났는가 물어본다는 것인지 저장된 개수 만큼 왔기 때문에에서 뭐가 저장된 개수 만큼 왔다는 것인지 잘 모르겠습니다. 지금까지의 강의 내용을 이해해보면 전자와 후자는 같은 걸 말하는 것 같고 뉘앙스만 보면 파일을 얼마나 읽어들였는지에 대한 진행도? 같은 느낌이 드는데 정확하게 이게 뭔지 잘 모르겠습니다 항상 좋은 답변 정말 감사합니다.
stdlib에서 제공하는 qsort 함수 qsort(void base, size_t width, int(*compare)(const void* key, const void* element)) 에서 compare부분이 비교함수를 가리키는 함수 포인터라고 알고있습니다. 그렇다면, qsort(aList, 5, sizeof(int), *myCompare); 같이 넣지 않고 qsort(aList, 5, sizeof(int), myCompare); 처럼 넣는 이유가 뭔가요?
int(*pfGetMax)(int,int,int) = GetMax; 를 통해 함수 포인터 선언 정의를 동시에 하고 printf("MAX: %d\n", pfGetMax(1,3,2)); 를 하셨는데 함수 포인터를 사용하여 GetMax 함수를 호출하는 과정에서 pfGetMax(1,3,2)를 사용하셨는데 이 표현이 이해가 가지 않았습니다. 포인터의 간접지정을 통해서 값을 가져와야 한다고 생각했는데 (*pfGetMax)(1,3,2) 처럼 해야하는 것이 아닌가요?
if문을 쓰는 것과 아래 코드처럼 for문만 쓰는 것 중에 어느 코드가 더 효율적인가요? for (int i = 1; i <= 5; i++) { for (int j = 0; j < 5 - i; j++) { printf(" "); } for (int j = 0; j < i; j++) { printf("* "); } puts(""); }
사용자로부터 첫번째 문자와 마지막 문자, 그리고 몇번 반복할건지를 직접 입력받는 경우를 가정하여 다음과 같이 코딩해봤습니다. 문자를 입력받고, 정수로 형변환한 후, 정수를 한개씩 늘려가다가 사용자가 지정한 마지막 문자를 만나면 멈추고 다시 문자로 출력되도록 하면 되겠다 싶어 작성한 코드입니다. 첫번째 scanf까지는 정상적으로 작동하는데 두번째 scanf값을 입력하면 실행창이 꺼져버립니다. 어느 부분에서 오류가 발생한건지 알 수 있을까요?
안녕하세요 강사님 [필수 실습 문제] 버스 요금 계산 관련 질문 있습니다. 저는 나이가 20살 미만이면 기본 버스 요금 1000원의 75% 적용한다는 구문을 printf 함수 안에 input*0.75 이렇게 적었는데요 이렇게 적으면 최종 요금이 0이 나오더라구요 이렇게 되는 이유가 최종 요금을 나타내는 형식문자가 %d인데 *0.75 를 곱해서 일어난 것 같은데 전체적으로 보면 input 0.75 = 1000 * 0.75 =750 의 정수형식이라서 상관없을 거 같은데 형식 문자가 %d 정수형이면 그 값을 나타내는 변수에도 정수만 들어가야하나요?
컴파일러 경로에 C:\msys64\mingw64\bin\g++.exe가 나타나지 않아서 C:\msys64\ucrt\bin\g++.exe로 설정을 했고 환경변수에는 C:\msys64\mingw64\bin으로 입력을 해놓았는데 나중에 문제가 생기지 않을까요? 테스트코드 실행했을 때는 문제없이 컴파일되긴 했는데.. mingw로 맞추고 싶은데 ucrt만 뜨는 이유가 뭔가요?
안녕하세요. 강의에서 64번째 줄 코드 *pf2 = *pf1;을 어떻게 해석해야 하는지 잘 모르겠습니다. 컴파일러는 런타임에 일어나는 일을 모르기 때문에 동적 할당으로 받은 메모리는 복사하지 못한다고 이해하면 될까요? memcpy를 이용한다면 다음과 같이 작성하면 되나요 ? memcpy(pf2, pf, 40); pf2 = pf;로 변경하여 실행하면 런타임 에러가 나는데, 그 이유를 2번처럼 이해하면 될까요? 감사합니다.
(수정) - 엔터가 다 사라져서 저장이 됬네요;; 안녕하세요, 코드는 하기와 같이 교수님과 똑같이 적었습니다. char str[255]; int i, i2; double d; scanf("%s %d %lf\n", str, &i, &d); // hello 3 3.14 printf("%s %d %f\n", str, i, d); scanf("%s %d %d\n", str, &i, &i2); // abc 1 1.23 printf("%s %d %d\n", str, i, i2); 그런데 실행 순서가 다릅니다. 강의 영상처럼 첫번째 scanf가 실행되고 바로 printf 가 실행된 후 두번째 scanf가 실행되는게 아니라, 한꺼번에 입력을 받고 한꺼번에 출력합니다... 뭐가 문제일까요? 디버거로 찍어봤는데 하기와 같습니다. release 모드로 돌렸는데 그거랑은 상관없겠죠..?
public class Animal { public void sound(){ System.out.println("동물 울음 소리"); } } public class Dog extends Animal{ @Override public void sound() { System.out.println("멍멍"); } } public class BabyDog extends Dog{ public void sound() { System.out.println("낑낑"); } } public class AnimalPolyMain1 { public static void main(String[] args) { Dog dog = new Dog(); BabyDog babyDog = new BabyDog(); soundAnimal(dog); soundAnimal(babyDog); } private static void soundAnimal(Animal animal){ System.out.println("동물 소리 테스트 시작"); animal.sound(); System.out.println("동물 소리 테스트 종료"); } } 안녕하세요. 강의 중 추가적으로 궁금한게 생겨서 질문드립니다. 그림에 따르면 코드에 만약에 제가 BabyDog클래스를 만들어서 Dog를 extends 한 후 오버라이딩을 하지 않고 매서드를 생성하면 "낑낑"이 아닌 매서드 오버라이딩이 된 "멍멍"이 출력되어야 하는 거 아닌가요??
여기서 객체가 생기는 위치가 딱 고정되어 있냐 아니냐 그 기준으로 보시면 됩니다. 이 부분이 잘 이해가 안되는데 객체가 생기는 메모리의 위치가 객체가 고정되는 특징(데이터 또는 BSS segment의 특징?)을 가지고 있냐 아니냐 이렇게 교수님 말씀을 이해해도 괜찮을까요? 그리고 7분 45초 에서 교수님이 하시는 말씀의 순서가 좀 복잡해서 이해가 잘 안됬는데 사실은 프로그래머들이 편리하도록 자동적으로 영역과 지속 기간을 관리해주는 성질을 가질 수 있게 스택이란 공간을 만들고 거기에 저장을 하는 것이다. 라고 제가 정리를 좀 해봤어요 이 정리가 맞는 표현인가요? 항상 좋은 답변 정말 감사합니다.