월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
강의 17:48 파일 이름을 scanf로 입력하기
강의 중 파일이름을 직접 코드에 치지않고 scanf를 사용 할 수 도 있다고 해서 scanf를 사용해보았는데 에러가 뜨네요. 방식이 틀린걸까요?#include <stdio.h> #include <stdlib.h> //exit() int main() { int c; char str[40]; FILE* file = NULL; char file_name[] = scanf("%s", str); file = fopen(file_name, "r"); if (file == NULL) { printf("Failed to open file.\n"); exit(1); } while ((c = getc(file)) != EOF) putchar(c); fclose(file); return 0; }감사합니다!!
- 해결됨홍정모의 따라하며 배우는 C언어
15.11 비트 필드 질문입니다.
안녕하세요.일단 저는 MacOS 환경에서 Visual Studio Code에 extention을 설치해서 듣고 있습니다.int main() { struct { bool option1 : 7; // bool : 0; // 자료형만큼의 크기가 더 할당됨. 패딩이 많이 들어가도 상관없으니 강제로 메모리를 더 달라. bool option2 : 1; // unsigned long long option3 : 16; } bbf; printf("%zu bytes\n", sizeof(bbf)); struct { unsigned int option1 : 32; // unsigned int : 0; unsigned int option2 : 1; // bool option3 : 1; } uibf; printf("%zu bytes\n", sizeof(uibf)); return 0; } 근데 예제를 따라하다가 bool option1 : 7;을 하니까 교수님과는 달리 제 환경에선 에러가 나더라고요...에러 메시지는 " error: width of bit-field 'option1' (7 bits) exceeds the width of its type (1 bit) " 였습니다.그래서 나름 찾아봤는데"In the C programming language, the width of a bit-field cannot exceed the width of the underlying type, and whether int bit-fields that are not explicitly signed or unsigned are signed or unsigned is implementation-defined. For example, int b:3; may have the range of values 0..7 or -4..3 in C, but only the latter choice is allowed in C++." (출처 : https://en.cppreference.com/w/cpp/language/bit_field )구글 번역을 참고해서 보니까 (영어를 잘하지 않아서 혹시 제가 잘못 이해한 부분이 있다면 알려주시면 감사하겠습니다.) 대충 비트필드의 넓이를 기본형식의 넓이가 초과할 수 없다는 것 같은데...unsigned int option1 : 32;는 되는데 unsigned int option1 : 33;하니까 비슷한 에러 " width of bit-field 'option1' (33 bits) exceeds the width of its type (32 bits) " 가 나오네요.int는 그렇다쳐도 bool의 크기는 1바이트니까 비트필드 안에서 7비트 선언하는게 왜 에러가 나오는지 혹시 알 수 있을까요? (구조체 안에 bool option1 : 1;로만 정의하면 또 괜찮아요..)
- 해결됨홍정모의 따라하며 배우는 C언어
7-12. switch와 case
안녕하세요. 궁금한 점 있어 질문드립니다.예제와 비슷한 코드를 구성해 질문하겠습니다.14행은 입력의 첫 글자를 제외한 나머지 글자들을 지워주는 코드로 이해했습니다.제가 이해한 바로는 프로그램을 실행한 뒤, 콘솔창에 hello를 입력하면,입력 버퍼에 'h', 'e', 'l', 'l', 'o', '\n'가 저장되고, 제일 먼저 'h'가 char c에 반환됨이후 putchar을 통해 c에 반환됐던 'h'가 출력됨나머지 입력 버퍼에 있던 글자들은 두 번째 while문 조건식을 충족하지 못해(\n 제외) 입력 버퍼에서 사라짐(escape sequence를 입력하기 전까지)새로운 입력 반복이렇게 이해했습니다.여기서 3번이 조금 헷갈립니다.첫 글자를 char c에 반환하고 putchar()로 실행한 뒤, 입력 버퍼에 있던 나머지 글자들은 두 번째 while문 안의 getchar()에 의해 한 글자씩 반복되며 입력 버퍼에서 사라지는 건가요? 그리고 첫 번째 while문은 char c로 값을 반환하는데, 두 번째 while문은 글자를 반환하는 변수가 없는 것 같습니다. 그렇다면 c에 반환된 첫 글자를 제외한, 입력 버퍼에 있던 글자들은 어딘가 반환되지 않고 그냥 사라지는 데이터들인가요? 최대한 제가 모르는 점을 정리했는데, 제대로 전달이 됐는지 모르겠네요 ㅜㅜ..늘 친절한 답변 감사합니다!
- 해결됨홍정모의 따라하며 배우는 C언어
문자열에 대해 질문있습니다.
안녕하세요. 궁금한 게 있어 질문드립니다.int main() { char str1[] = "String11"; char *str2 = "String22"; printf("%s %s\n", str1, str2); // String11 String22 printf("%p %p\n", str1, str2); // 0x16fc27078 0x1001dbf69 printf("%s\n", str2); // String22 printf("%c %p\n", *str2, str2); // S 0x1001dbf69 int arr1[] = {1, 2, 3}; int arr2[] = {4, 5, 6}; int *arrptr = arr2; // printf("%d %p\n", arr1, arr1); // 1876390008 0x16fd77078 printf("%d %p\n", *arr1, arr1); // 1 0x16f307078 printf("%d %p\n", *arrptr, arrptr); // 4 0x16f4eb068 int n = sizeof(arr1) / sizeof(int); for (int i = 0; i < n; i++) { printf("%d ", arr1[i]); } return 0; }int형 배열은 반복문을 통해 원소를 하나씩 꺼내어 출력해줘야 하는데, char str1[] = "String11" 에서 문자열 배열은 String11이라는 문자 하나하나가 모여서 문자열을 이루고 있음에도 불구하고 str1을 %s포맷으로 printf함수로 출력하면 왜 반복문을 사용하지 않아도 문자열이 그대로 나오나요?그리고 char *str2 = "String22" 에서도 char형 포인트 변수 str2에는 문자열 "String22"중에서 첫번째 문자인 'S'의 메모리 주소가 저장되어 있을 텐데 str2도 마찬가지로 'S'만 나오는 것도 아니고 왜 문자열 전체가 그대로 나오는건가요..?
- 해결됨홍정모의 따라하며 배우는 C언어
7-2. getchar(), putchar() 함수
안녕하세요. 강의를 들으며 궁금한 점이 생겨 질문드립니다. 1번 예제를 보고, 저는 getchar() 함수가 '입력 받은 문자를 해당 아스키코드에 대응하는 정수로 해석해 변수에 그 값을 저장'한다고 이해했습니다. 그렇다면 그 값을 int로 해석한 뒤 char type 변수에 다시 저장하는 것인데, 이 지점이 잘 이해되지 않습니다. char 범위의 값을 int 형식으로 해석한 뒤 다시 변수에 저장하기 때문에 메모리에 있어 아무 문제가 없는 걸까요?? int로 해석하는 것이 'int 형식으로 값을 변환함'으로 이해하는 것이 맞을까요??buffer라는 임시 공간이 활성화 되는 시점은 getchar() 함수를 통해 문자열을 입력한 뒤, 반복문에 들어가는 때인가요? 아니면 getchar() 함수로 입력받는 그 순간 buffer가 활성화 되는 건가요?늘 친절한 답변 감사합니다!
- 미해결홍정모의 따라하며 배우는 C언어
배열 초기화 쉼표 쓰임
안녕하세요. 잘 듣고 있습니다. char cakes[7] = { 'A' ,}; 이런식으로 배열 초기화시 마지막에 쉼표를 넣는 경우가 있는데 무슨 뜻인가요? 해당 내용이 궁금해서 '배열과 포인터' 같은 연관 강의를 빠르게 찾아봤는데, 없었습니다. 혹시 해당 내용 설명한 강의가 있나요?
- 미해결홍정모의 따라하며 배우는 C언어
float의 가장 작은 값
강의에서 1:00에서 변수 max에다가 float가 가질 수 있는 가장 작은 값을 입력하는데 FLT_MAX에다가 -를 붙이는데 FLT_MIN을 사용하지 않는 이유가 뭔가요?또 정수형의 경우예를들어 char형이면 char형의 최댓값은 127이고 최솟값은 -128이어서 최댓값인 127에 -를 붙여도 최솟값이 안되는데실수의 경우는 다른가요? 그냥 최대값인 FLT_MAX에 -를 붙이면 최솟값이 되나요? 항상 감사합니다!!!
- 미해결홍정모의 따라하며 배우는 C언어
강의 예제 flag의 사용이유
강의 초반부분 0:20 부분을 보고 코드를 짜보았습니다.#include <stdio.h> int main() { char ch; int characters = 0, words = 1, lines = 1; printf("Enter text : "); while ((ch = getchar()) != '.') { if (ch == ' ') words++; else if (ch == '\n') lines++; else characters++; } printf("Character = %d, Words = %d, Lines = %d", characters, words, lines); return 0; }이 후 강의를 끝까지 다 봤는데 교수님의 코드와 저의 코드는 상당히 달랐습니다. 교수님은 flag라는 _Bool자료형을 사용했습니다.코드를 한줄 한줄 읽어가면서 flag가 어떤식으로 작동하는지는 쪼오끔 알았는데 flag를 사용하는 이유를 모르겠습니다.강의를 보면 프로그래머들이 자주 사용하는 형식이라고 하는데 flag의 장점이 뭔가요? 항상 감사합니다!!!
- 미해결홍정모의 따라하며 배우는 C언어
/0 앞에 띄워쓰기 유무로 자릿수가 변하나요?
char str3[20] = "Hello,\0World";char str3[20] = "Hello, \0World";printf("%c\n", str3[10]); 의 값이, 바로뒤에\0를 치면 l이고, 하고 한 칸 띄고 \0을 치면 r입니다. h = 0번째e = 1번째..., = 5번째\0 = 6번째W = 7번째o = 8번째r = 9번째l = 10번째d = 11번째 중간에 띄워쓰기도 공백으로서 자릿수를 차지해서위와 같은 결과가 나오는 걸까요?
- 미해결홍정모의 따라하며 배우는 C언어
강의 내용 중 연산자의 우선순위
강의 17:00부분을 보면 어떠한 expression이 있을 때 괄호의 경우 어느것 먼저 계산될지는 c언어 표준에 정해져있지않으므로 컴파일에 따라 결정된다고 설명해주셨습니다.그런데 구글에 c언어 연산자 우선순위를 검색하면 associativity라고 있는데 연산자 우선순위가 같은 경우 이 방향에 따라서 결정되는거 아닌가요?괄호 같은 경우 연산자 우선순위가 1순위지만 associativity가 왼쪽에서 오른쪽이므로 여러개 있을경우 왼쪽부터 계산되는거 아닌가요?제가 잘못이해한걸까요?감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
강의 예제
#include <stdio.h> int main() { int number; printf("Input a positive integer : "); scanf("%d", &number); if (number % 2 == 0) printf("Even"); return 0; }강의 예제에서 숫자를 받아서 그 숫자가 짝수면 Even을 출력하는 예제를 만들었습니다.숫자를 문자 'A'로 받으면 'A'는 65니까 당연히 아무것도 출력이 안될줄알았는데 왜 Even이 출력되는걸까요?
- 미해결홍정모의 따라하며 배우는 C언어
다중 구조체 문의
안녕하세요 수강생 입니다.문의 사항이 있어 글 남깁니다.다중 구조체에 대해 문의남깁니다.예를들어struct test{int a=0;int b=0;}TEST[2][2] *PTEST[2][2]; 이런 식 입니다.이때, 구조체에 접근할 때 주소연산자가 아닌 대입으로 접근이 가능한데 왜 그런가요?예를 들어..PTEST[2][2]->a 는 접근이 안되고 TEST[2][2].a는 접근이 됩니다.
- 미해결홍정모의 따라하며 배우는 C언어
12.2 강의 질문있어요
안녕하세요.const char* str = “Constant string”; // str is a modifiable lvalue.str = “Second string”; // “Constant string” = “Second String” // imposiblestr[0] = ‘A’; //Error char str2[] = “String in an array”;str2[0] = ‘A’; // OK 문자열 포인터 개념이 좀 어렵게 느껴지네요.str[0] = ‘A’; 은 왜 안되는 건가요? 만약 포인터를 이용해서 0번째 배열에 원소를 저장하고 싶으면 어떻게 해야 하나요?
- 해결됨홍정모의 따라하며 배우는 C언어
6-11 질문
안녕하세요! 다음 코드를 제 스스로 분석해봤는데, 정확한 분석이 맞는지 헷갈려서 질문드립니다.(1)Comma 연산자는 Assignment 연산자보다 서열이 낮은 것으로 알고 있습니다.1번 예시에서 콤마가 작동하는 시기는 z에 x의 값이 대입되고, y에 값 2가 대입된 뒤인가요?콤마 연산자는 왼쪽에서 오른쪽으로 계산을 하는데, 이미 대입연산자에 의해 각각 값이 대입된 변수 z와 y를 또 계산한다는 것이 잘 이해되지 않습니다.이 경우의 콤마 연산자의 계산이란 무엇인지 알려주시면 감사하겠습니다. (2)1번 예시와 2번 예시의 차이점은 무엇이 먼저 계산되느냐 일까요?즉 1번 예시에서는 x에 1이 대입되고, 그 값이 다시 x에 대입된 뒤, y에 2가 대입되고, 콤마 연산자가 작동한다면, 2번 예시에서는 x에 1이 대입되고, y에 2가 대입된 뒤, x의 값이 z에 대입되고, 콤마 연산자가 작동하는 건가요? 늘 친절한 답변 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
6-10. 어셈블리 질문!
안녕하세요. 강의에서 일반문과 그것의 축약문의 어셈블리 비교를 통해 효율성을 체크했습니다.그냥 보면 둘은 똑같아 보였는데, 자세히 보니 끝에서 두 자리가 다르더군요.이건 제 단계에서 크게 신경쓰지 않아도 되는 것 같은데, 그래도 궁금해서 질문드립니다.일반문과 축약문의 어셈블리가 완전 같지는 않은데, 저 정도는 효율성을 따지는데 있어 굳이 신경 쓰지 않아도 되는 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
6-4 강의 질문
안녕하세요. 관계 연산자 3번 예시를 공부하다 문자를 입력받으면 무한루프에 빠지는 정확한 이유가 뭔지 궁금해서 질문드립니다.변수 guess는 double type이기 때문에 문자를 받을 수 없는 것은 이해했습니다.그런데 왜 문자를 넣으면 무한루프에 빠지는지 모르겠습니다.디버깅을 해보니 guess는 처음 입력된 '3'이 계속 저장돼 있는데, 이것과 관련이 있는 걸까요?
- 해결됨홍정모의 따라하며 배우는 C언어
표현식의 자료형
안녕하세요. 5-11 형변환을 공부하다가 궁금한 점이 생겨 질문드립니다.13행에서 변수 i에, 강제로 float로 변환된 표현식 'f + 2 * c;'의 값이 저장되는 것으로 이해했습니다.cpu는 다른 자료형들을 연산할 수 없기 때문에 컴파일러가 표현식의 자료형을 동일하게 변환시키는 것은 이해됩니다.그런데 변할 때 피연산자들 중 상대적으로 더 큰 자료형을 갖는 피연산자에 맞춰 변환되는 것인가요?즉 13행의 경우는 실수 자료형을 갖는 변수 f가 정수인 '2 * c' 보다 더 큰 자료형이기 때문에 두 피연산자를 더한 값의 자료형이 float가 되는 것인가요?늘 좋은 답변 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
5-11 형변환 질문
안녕하세요! 형변환 공부 중 예상치 못한 결과가 나와서 질문드립니다.11행의 float 자료형을 갖는 변수 f에 double 표현식의 값이 들어갔습니다.그래서 '분명 표현식의 값이 커지면 절삭되겠군?' 이라는 생각을 갖고, 변수 d와 비교하며 그 값을 크게 설정했습니다.그런데 그 크기를 늘리니 둘 다 똑같은 값이 절삭되어 나오는 것 같습니다.왜 이런 현상이 일어났는지 설명해주시면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
강의 4:29 0.01f 위에 커서를 올렸을 때
강의의 경우 (float)(0.009999999776F)라고 뜨는데왜 저는 그냥 단순하게 (flat)(0.01F)라고 뜰까요?비쥬얼스튜디오에서 따로 설정해야하는건가요?
- 해결됨홍정모의 따라하며 배우는 C언어
5-6. 괄호에 대한 질문
안녕하세요. 연산자의 우선순위에 대해 설명하실 때 강의에서 말하는 ()는 operator가 아니라 primary expression이라고 하셨습니다.강의의 ()는 operator가 아닌데, 어떻게 연산자 우선순위를 설명할 때 포함될 수 있는지 모르겠습니다. 늘 좋은 강의, 답변 감사합니다.