월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨홍정모의 따라하며 배우는 C언어
10.2강 27:09에서 질문이 있습니다.
가변 길이 배열에 대해서 위키에는 길이를 런타임에 결정하는 배열(whose length is determined at run time (instead of at compile time).)라고 정의되어있는데요.https://en.wikipedia.org/wiki/Variable-length_array int main() { const int n = 8; int arr[n]; };제가 작성한 코드에서 n이 8로 초기화 및 상수로 되어 있는데 이건 컴파일 타임에 이미 배열의 길이를 결정해 놓은게 맞나요??오류가 나는 것은 비주얼 스튜디오의 컴파일러가 이 문법을 지원하지 않아서 일까요,,??
- 해결됨홍정모의 따라하며 배우는 C언어
포인터에 저장되는 주소값의 자료형
포인터 변수가 어떤 변수의 주소값을 저장한다는 것은 이해했습니다.그런데 메모리의 '주소'는 어떤 자료형에 속하나요?형식지정자 %p로 출력해보면 16진수로 나오는 것 같은데 정수형이라고 생각해도 될까요??
- 미해결홍정모의 따라하며 배우는 C언어
1.0625e0과 0.0625e0의 차이
안녕하세요. 강의의 23째 줄 코드를 제가 0.0625e0;로 바꾼 후 build를 해보니까 프로그램 마지막 출력에서 각각 아래와 같은 값이 나왔습니다. 0x1.0000000000000p-4 0X1.0000000000000P-4 저는 0.0625가 1/16이니 출력이 0x1.000...0p-1이나0x0.1000...0p+0일 줄 알았는데 p-4가 나와서왜 이러한 값이 나오는지 질문드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
const int angel = 1004;에서 변수였던 angel이 기호적 상수가 되면
const int angel = 1004;에서 변수였던 angel이 const를 붙임으로써 기호적 상수(symbolic constant)가 되면 rename으로 다른 부분에 써놓았던 angel을 전부다 변화시키면 그래도 오류가 나나요? const를 붙인 자료형에서 상수를 바꾸면 오류가 난다고 봤었는데, 변수였던 angel도 고치면 오류가 나나요? 그러니까 angel이라는 이름을 못바꾸는건가요? 아니면 angel에 대입하는 1004라는 숫자를 못바꾸는건가요? 아니면 둘다 못바꾸는건가요?
- 해결됨홍정모의 따라하며 배우는 C언어
8.5강 2분 38초 관련해서 질문이 있습니다.
입력 "A 3 3 "에 대해입력 버퍼에 저장된 값은 "A 3 3 \n"이며"A 3 3" 까지만 읽고AAAAAAAAA를 출력한다는 것은 알겠습니다. 그 다음 입력 "B 1 2 "에 대해입력 버퍼에 " \n"이 남아있으므로입력 버퍼에 저장된 값은 " \nB 1 2\n"이며입력 버퍼에서 개행 문자(\n) 앞의 공백(" ")만 읽어오고나머지 rows나 cols는 이전에 저장된 값을 재사용해서3개씩 3줄의 공백을 출력하는 것 같습니다. 여기서 궁금한 점이..scanf의 첫 번째 인수로 공백(" ")을 읽고 나머지 rows와 cols는 읽지 못했는데 왜 그대로 진행되어 9개의 공백(붉은색 부분)이 출력되는건가요?? 링크의 문서에는 입력 스트림에 저장된 값이 형식 지정자와 다를 경우 scanf를 종료한다고 되어있습니다. 그러면 첫 번째 인수로 공백(" ")을 읽고 한 줄에 3개씩 3줄의 공백(" ")를 출력하고 난 뒤에는개행 문자 ("\n")를 읽어서 9개의 줄 바꿈이 출력되어야 할 것 같은데왜 바로 BB가 출력되었는지 잘 모르겠습니다.. [입력과 그에 대한 예상 출력 콘솔 화면] A 3 3 // 첫 번째 입력 : A 3 3 AAA AAA AAA // 한 줄당 3개의 'A'를 3줄 출력 B 1 2 // 두 번째 입력 : B 1 2 // 한 줄당 3개의 공백을 3줄 출력 // 9번 + 3번 총 12번의 줄바꿈 BBhttps://learn.microsoft.com/en-us/cpp/c-runtime-library/format-specification-fields-scanf-and-wscanf-functions?view=msvc-170 scanf를 실행시켜서 입력 버퍼의 값을 읽고 각각의 인수에 저장한 후에는 입력 버퍼에서 읽은 값을 제거하나요? 아니면 getchar처럼 스트림의 위치를 마지막으로 읽었던 값의 다음 위치로 이동시키나요?? 첫 번째 입력이 "A 3 3"이고 두 번째 입력이 두 번째 입력이 "B 1 2"일 때첫 번째 출력을 한 후 입력 버퍼에 저장된 값이 "\nB 1 2\n"인데scanf가 첫 번째 \n만 읽어서 12번 줄 바꿈 출력 후 종료되는건가요? 계속 구글링 해보고 있지만 답을 찾지 못해서 질문드립니다..
- 미해결홍정모의 따라하며 배우는 C언어
부호 있는 정수, 부호 없는 정수
예를 들어 8비트 2진수1010 1110 이 있을 때컴퓨터가 어떻게 맨 앞 비트가 부호비트인지 아닌지 아는 것인가요?양수 174가 될수도 있고 음수 -46이 될 수 있는데 컴퓨터가 어떻게 그것을 구분하는 것인지 궁금합니다..
- 미해결홍정모의 따라하며 배우는 C언어
gcc 오류 이유
왜 오류가 난건가요..?
- 해결됨홍정모의 따라하며 배우는 C언어
7.2강 06:06 질문이 있습니다.
char ch; ch = getchar(); // 1) while (ch != '\n') { putchar(ch); // 2) ch = getchar(); }; getchar와 putchar의 세부 동작 방식이 궁금해서 여쭤봅니다..IBM에서는 getchar 함수의 역할을 현재 스트림 위치의 문자 하나를 읽고 다음 스트림의 위치로 이동한다고 설명되어있는데 스트림의 위치라는게 버퍼의 인덱스를 말하는건가요??https://www.ibm.com/docs/ko/i/7.3?topic=functions-getc-getchar-read-character getchar는 입력 버퍼가 비어있을 때는 입력을 받지만, 입력 버퍼가 차있을 때는 입력 버퍼의 현재 위치의 값을 반환하고 다음 위치로 이동하는 함수라고 이해하면 될까요?? 디버거로 putchar의 동작을 확인했을 때는 입력 버퍼에서 맨 앞의 글자를 한 글자씩 출력하는 것 같은데 그러면 putchar는 버퍼를 사용하는 방식이 아닌건가요?? 이클립스에서는 Ctrl+우클릭 후 Open Implementation을 선택하면 라이브러리 함수가 동작하는 코드를 직접 확인할 수 있는 것 같은데 비주얼 스튜디오에서도 확인하는 방법이 있을까요..??
- 해결됨홍정모의 따라하며 배우는 C언어
6.17강 14:39분 평균을 구하는 예제 질문이 있습니다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define SIZE 5 int main(void) { int numbers[SIZE]; int sum = 0; int i; printf("Enter %d numbers : ", SIZE); for (i = 0; i < SIZE; ++i) { scanf("%d", &numbers[i]); // &( numbers[i] ) : 배열 인덱스 역참조 연산 후 주소 연산 } for (i = 0; i < SIZE; ++i) { sum += numbers[i]; } printf("Sum : %d\n", sum); // 첫 번째 평균 출력식 Average 1) double average = sum / SIZE; printf("Average 1) : %lf\n", average); // 두 번째 평균 출력식 Average 2) printf("Average 2) : %lf\n", (sum / SIZE)); return 0; }위 코드에서 첫 번째 평균 출력식 Average 1)는 정상적으로 평균 3.000000을 잘 출력하는데두 번째 평균 출력식 Average 2)는 0이 출력이 됩니다..혹시 print 함수의 인수로 표현식이 들어가면 안되는걸까요??
- 해결됨홍정모의 따라하며 배우는 C언어
fgets() 함수 질문
안녕하세요.11-4 강의 듣고 궁금한 점이 있어 질문드립니다. 콘솔창에 문자를 입력할 때 eof 혹은 줄바꿈 말고 4글자를 입력하면 프로그램이 종료되는데, 이는 어떤 원리에서 종료되는 걸까요?
- 해결됨홍정모의 따라하며 배우는 C언어
unsigned가 없는 float에 부호가 0인 이유
16:50을 보면 실수에는 unsigned가 없기 때문에 무조건 부호 비트가 들어간다는 설명이 있습니다. unsigned가 양수를 나타내는 것, signed가 음수를 나타내는 것으로 알고 있습니다. 그렇다면 음수인 1이 부호비트에 들어가야 하는 것 아닌가요?부호비트에 0이 들어가는 건 1. 2의 보수법 표현 때문아니면 unsigned int에 대한 자료형이 없을 뿐 unsigned int에 대해 저런 식으로 표기하기 때문 1,2 중 어떤 case인지, 아님 기타의 case 때문인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
버퍼에 대한 궁금증
#include <stdio.h> #include <stdbool.h> #include <ctype.h> int main() { char ch; int characters=0, words=0, lines=0; bool word_flag=false; bool line_flag=false; printf("Enter text: \n"); while( (ch=getchar())!='.'){ if(isspace(ch)==false)//공백이 아닐경우 characters++; if(isspace(ch)==false && line_flag==false){ lines++; line_flag=true; } if(ch=='\n') line_flag=false; if(isspace(ch)==false && word_flag==false){ words++; word_flag=true; } if(isspace(ch)==true) word_flag=false; } printf("characters:%d words: %d lines: %d",characters,words,lines); return 0; }위 코드에서 버퍼에 '.'(따옴표)까지 저장이 되는지 그전 문자까지만 저장이 되는지 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
6.11강 4:36 부분에서 질문이 있습니다.
안녕하세요수업 중에 4:36 부분에서 궁금한 내용이 있어서 질문드립니다. 위키피디아에서컴마 연산자를첫 번째 피연산자를 평가한 후 그 결과를 버린 다음,두 번째 피연산자를 평가하고 그 결과를 반환하는 이항 연산자라고 정의하는 것을 확인했습니다.https://en.wikipedia.org/wiki/Comma_operator int i, j; i = 1; printf("%d", (i++, j = 3)); // 결과 : 3그럼 위 코드에서 반환하는 결과값은(i++, j = 3)의 결과값은 변수 j인가요 아니면 상수 리터럴 3인가요...???
- 미해결홍정모의 따라하며 배우는 C언어
알고리즘에서 경쟁력을 찾으라고 하셨는데
이는 알고리즘을 알맞게 사용하는 것을 말씀하시는 건가요? 아니면 프로그램 주제에 맞는 알맞은 알고리즘을 개발하는것을 말씀하시는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
고정너비 정수
안녕하세요 수업을 듣다가 의문점이 생겨 글을 올립니다. 제가 이해한 바로는 고정너비 정수를 이용하는 이유가 C언어 표준에서는 자료형마다 최소 기준만을 설정해놓았기 때문에, 만약 시스템(컴파일러 등등)이 달라진다면 int 나 char와 같은 자료형이 차지하는 메모리도 달라질 수 있기 때문에, 이식성을 높이기 위해서int32_t와 같은 자료형을 사용한다는 것입니다.하지만 stdint.h를 보면 typedef int int32_t; 처럼 int의 별칭을 int32_t로 정하고 있습니다. 이러한 상황에서는 int를 32bit로 사용하는 시스템에서는 int32_t가 32bit를 사용하겠지만, 만약에 int를 64bit로 사용하는 시스템이 있다고 가정을 한다면(C 표준은 bit의 최소기준만 설정해놓았기 때문), int32_t는 int의 별칭(alias)이기 때문에 결국은 int32_t도 64bit를 사용하는 것 아닌가요? 이렇게 된다면 int32_t는 더 이상 고정되어있지 않고 시스템이 바뀔 때마다 달라지는 것 아닌가요? 궁금합니다..
- 미해결홍정모의 따라하며 배우는 C언어
fgets() 함수에 관한 질문
int main() { char* buffer=NULL; fgets(buffer, 10, stdin); printf("%s", buffer); return 0; }int main() { char buffer[10]; fgets(buffer, 10, stdin); printf("%s", buffer); return 0; }밑에 코드는 출력까지 문제 없이 되는데위에 코드는 출력이 되지 않습니다. 왜 이런 현상이 발생하는지 알고 싶습니다.
- 해결됨홍정모의 따라하며 배우는 C언어
한 번에 여러 개의 값을 입력했을 때에 관해 질문이 있습니다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { // TO DO : q가 입력될 때까지의 입력받은 모든 정수 합 출력 // 1. 준비 int input = 0; // 입력을 저장할 변수 int sum = 0; // 합계를 저장할 변수 int status = 0; // scanf의 반환값(입력값의 갯수)을 저장할 변수 // 2. 입력 printf("Enter an integer (q to quit) : "); status = scanf("%d", &input); // scanf()의 동작 // 입력받은 값이 형식 지정자의 형식과 일치할 경우 입력으로 취급하여 입력값의 갯수 반환 // 입력받은 값이 형식 지정자의 형식과 일치하지 않을 경우 입력으로 취급하지 않으며 0을 반환 // * 성공적으로 스캔된 입력의 갯수 확인용 printf("%d\n", status); // 3. 반복 while (status == 1) { // scanf()의 반환값이 1일 때만 반복 // 현재 루프에 대한 처리 sum = sum + input; // 다음 루프 printf("Enter next integer (q to quit) : "); status = scanf("%d", &input); } // 4. 출력 printf("SUM = %d\n", sum); }; 1 2를 입력하니 "Enter next integer (q to quit) : " 문장이 2개 출력되었지만1 2를 모두 입력으로 인식했는지바로 sum을 출력했을 때 3이 출력됬습니다. 다음으로 1 2 3 4 5를 입력하니"Enter next integer (q to quit) : " 문장이 5개 출력되었지만 sum을 출력해보니 10이 출력됬습니다. 저는 scanf의 형식 지정자와 값을 저장할 변수를 하나만 지정했는데 왜 5개 입력에 대해서 5번 루프를 실행하고 sum의 값이 정상적으로 출력되었는지 잘 이해가 안되서 질문 드립니다.. 그리고 scanf()는 입력한 값의 형식이 형식 지정자의 형식과 일치할 경우 스캔에 성공한 입력의 갯수를 반환한다고 배웠는데중간에 scanf의 반환값을 printf()해서 성공적으로 스캔된 입력의 갯수를 확인해 봤을 때 형식에 맞는 변수를 여러 개 입력해도 1이 출력되던데 이유가 뭘까요,,??
- 해결됨홍정모의 따라하며 배우는 C언어
2:26 부분 관련해서 질문드립니다
double을 float로 변환할 때 float의 가수부가 저장할 수 있는 23비트를 초과하면 23비트까지 저장하고 초과한 부분은 모두 절삭된다고 하는데 맞는건가요?? 절삭이 되면 항상 값이 줄어야 하는데 아래 코드로 해보니 결과가 좀 다르게 나와서요..#include <stdio.h> int main() { double d1 = 3.1415928; float f1 = d1; printf("%.7f\n", d1); printf("%.7f\n", f1); double d2 = 3.1415929; float f2 = d2; printf("%.7f\n", d2); printf(".7f\n", f2); }; double형 3.1415928를 float로 변환하면 3.1415927로 값이 줄어서 나오는데double형 3.1415928를 float로 변환하면 3.1415930으로 값이 증가해서 나옵니다..왜 이렇게 나오는지 알 수 있을까요?? 3.1415928≈11.00100100001111110110101010000010이며 이 중 가수부로 저장되는 비트는 00100100001111110110101이고 나머지 010000010는 버려진다는 것과3.1415929≈11.00100100001111110110101010000011이며 이 중 가수부로 저장되는 비트는 00100100001111110110101이고 나머지 010000011는 버려진다는 것인데버려지는 비트를 제외하고 저장되는 값은 11.00100100001111110110101로 똑같은데 왜 변환된 값은 3.1415927과 3.1415930인지 잘 모르겠습니다.
- 해결됨홍정모의 따라하며 배우는 C언어
질문이 있습니다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { // 복리 계산 프로그램 double seed_money, target_money, annual_interest; printf("Input seed money : "); scanf("%lf", &seed_money); printf("Input target money : "); scanf("%lf", &target_money); printf("Input annual interest(%) : "); scanf("%lf", &annual_interest); double fund = seed_money; int year_count = 0; while (fund < target_money) { year_count++; fund = fund * ( 1.0 + ( annual_interest % 100.0 ) ); }; printf("It takes %d year\n", year_count); return 0; } 제가 작성한 코드에는 annual_interest과 100.0 아래 빨간줄이 나오면서 expression must have integral type이라고 출력되는데 왜이럴까요..??
- 미해결홍정모의 따라하며 배우는 C언어
공백이 왜 생기는지 모르겠어요
8.5 숫자이 모든 문자를 섞어서 입력받기 강의에서공백이 왜 생기는거에요?