월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
질문드려요
안녕하세요. 질문드려요 char i; cin >> i; printCharacterClassification(i); char 타입으로 입력받았을 경우에는 의도한 대로 printCharacterClassification(i)을 통해서 의도한대로 검증이 이루어지는데, 왜 int타입으로 입력받을 경우에는 isalnum결과가 false가 되나요? int i; cin >> i; printCharacterClassification(i); 으로 작성해서 숫자를 입력해줄경우 isalnum false 출력되는데 char 타입으로 숫자를 넣어주면 isalnum ture로 출력되거든요. 혹시 왜 이런 차이가 나는지 알 수 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
헤더에 선언한 클래스로 메인함수에서 생성하였을 때 값 전달에 관한 질문
안녕하세요. 헤더에 선언한 클래스로 메인함수에서 생성하였을 때 값 전달에 관한 질문입니다. main 함수에서 header에 있는 클래스 배열을 생성하는데 값이 전달이 안됩니다. 주소를 확인해 보니 class안에서 작동될 떄의 배열과 main 함수에서 생성한 배열의 메모리 주소가 다릅니다. 헤더에 있는 클래스를 이용하고, main 함수에서 생성자를 사용하여 새로운 2차원 배열을 만들려고 하는데 어떻게 해야 값이 전달되는지 모르겠습니다. 혹시 제가 놓치고 있는 근본적인 실수가 있을까 하여 코드 전문을 첨부합니다. 바쁘신데 읽어주셔서 정말 감사합니다 :) //아래로 헤더 #pragma once #include <iostream> using namespace std; class Matrix { private: int** m_arr; int m_size = 0; public: Matrix(const int input_size) { m_size = input_size; int** m_arr = new int* [input_size]; for (int i = 0; i < input_size; i++) { m_arr[i] = new int[input_size]; } cout << "클래스 안 주소 값 삽입 전 " << m_arr << endl; cout << "enter the element " << endl; for (int i = 0; i < input_size; i++) { for (int j = 0; j < input_size; j++) { m_arr[i][j] = 0; cout << m_arr[i][j]<<" " << endl; } } for (int i = 0; i < input_size; i++) { for(int j = 0; j < input_size; j++) { int temp = 0; cin >> temp; m_arr[i][j]=temp; cout << "클래스 안 주소 " <<m_arr << endl; } } cout << "생성 완료 " << endl; } int mul(int** arr1, int** arr2, int input_size) { int** mul_arr = nullptr; mul_arr = new int* [input_size]; for (int i = 0; i < input_size; i++) { for (int j = 0; j < input_size; j++) { for (int k = 0; k < input_size; k++) { mul_arr[i][j] = arr1[i][k] + arr2[k][j]; } } } cout << "행렬의 곱 : " << endl; for (int i = 0; i < input_size; i++) { for (int j = 0; j < input_size; j++) { cout << mul_arr[i][j] << " "; } cout << endl; } }; void mat_print() { cout << "행렬 출력" << endl; for (int i = 0; i < m_size; i++) { for (int j = 0; j < m_size; j++) { cout << this->m_arr[i][j] << " "; } cout << endl; } } }; // 아래로 cpp #include <iostream> #include "tools.h" int main() { int size = 0; cout << " enter the matirx_A size, n x n " << endl; cin >> size; //입력 받은 사이즈에 맞추어 행렬 생성 Matrix arr_A(size); cout << "클래스 밖 주소 " << &arr_A << endl; Matrix arr_B(size); arr_A.mat_print(); // Matrix mul(arr_A,arr_B,size_a); return 0; }
- 미해결홍정모의 따라하며 배우는 C++
abort() has been called
csv 파일을 불러와서 배열에 대입하는 코드를 짜 보았습니다. 그 과정에서 다음과 같은 에러가 발생하였는데 그 원인을 찾지 못하겠습니다. #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <string> using namespace std; void readCSV(istream& input, vector< vector<string> >& output) { string csvLine; while (getline(input, csvLine)) { istringstream csvStream(csvLine); vector<string> csvColumn; string csvElement; while (getline(csvStream, csvElement, ',')) { csvColumn.push_back(csvElement); } output.push_back(csvColumn); } } void Maketxtfile(const string filename, const int num_start, const int num_end, const int col_start, const int col_end, vector< vector<double> >& matrix) { /*메트릭스 선언 할 때 형식 int col_size; int num_size; num_size = num_end - num_start + 1; col_size = col_end - col_start + 1; vector< vector<double> > matrix(num_size, vector<double>(col_size)); */ int data_number{ 0 }; int data_size{ 0 }; int col_size{ 0 }; int num_size{ 0 }; num_size = num_end - num_start + 1; col_size = col_end - col_start + 1; string a; fstream file(filename, ios::in); double b; if (!file.is_open()) { cout << "File not found!\n"; } typedef vector< vector<string> > csvVector; csvVector csvData; vector<double> array; readCSV(file, csvData); file.close(); for (csvVector::iterator i = csvData.begin() + num_start - 1; i != csvData.end(); ++i) { for (vector<string>::iterator j = i->begin() + col_start - 1; j != i->end(); ++j) { a = *j; b = stod(a); array.push_back(b); } } data_number = size(array); //data_number = sizeof(array) / sizeof(array[0]); int i = -1; int j = 0; for (int k = 0; k < data_number; k++) { j = k % col_size; if ((k % col_size) == 0) { i++; } matrix[i][j] = array[k]; } } int main() { int num_start{ 0 }, num_end{ 0 }, col_start{ 0 }, col_end{ 0 }, col_size{ 0 }, num_size{ 0 }; string filename = "R410A_PT_D_vapor.csv"; num_start = 6; num_end = 99; col_start = 2; col_end = 125; num_size = num_end - num_start + 1; col_size = col_end - col_start + 1; vector< vector<double> > matrix(num_size, vector<double>(col_size)); Maketxtfile(filename, num_start, num_end, col_start, col_end, matrix); cout << matrix[0][19] << endl; cout << matrix[1][19] << endl; cout << matrix[num_size - 1][19] << endl; } 읽는 엑셀 파일은 다음과 같이 생겼습니다. 코드상에 문제가 있는 것인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
원소 하나를 push했는데 capacity가 2만큼 늘어났습니다.
int main() { vector<int> v; //push v.push_back(1); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; v.push_back(2); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; v.push_back(3); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; //pop v.pop_back(); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; v.pop_back(); for (auto &e : v) cout << e << " "; cout << endl; cout << v.size() << " " << v.capacity() << endl; return 0; } 첨부한 코드와 같이 reserve를 하지 않고 size와 capacity의 변화를 보고자 프로그램을 짰습니다. 예상대로 push를 할 때는 size와 capacity가 함께 커졌고, pop을 할 때는 size는 작아졌으나 capacity는 그대로였습니다. 그러나, 다음의 결과값을 보면 알 수 있듯이 결과값 /* 1 1 1 1 2 2 2 1 2 3 3 4 1 2 2 4 1 1 4 */ 예외적으로 3을 push한 이후 갑자기 capacity가 2만큼 늘어났습니다. 왜 이런 일이 발생하게 되는 건가요? (vector 초기화는 제vscode 버전이 uniform initialization을 지원하지 않아 저렇게 했습니다!)
- 미해결홍정모의 따라하며 배우는 C++
string에서 null char 관련
string my_str_(""); cout << std::boolalpha; cout << my_str_.empty() << endl; cout << (int)my_str_[0] << endl; // 0 출력 수업중에 사용된 코드에서 마지막에 null char가 있는지 확인하려고 (int)my_str_[0]을 출력해보았는데, 0이 출력되었습니다. 수업 중에 교수님께서 string에서는 null char를 절대 포함하지 않는다고 하셨고 분명히 my_str_.empty()에서 확인한것처럼 메모리가 비어있는데, 왜 (int)my_str_[0] 에 접근이 가능하고 0으로 값이 출력되는 건가요?
- 해결됨홍정모의 따라하며 배우는 C++
#define의 효력이 미치는 범위와 관련해서 질문 있습니다.
#define LIKE_APPLE #include "different_source.h" 이 순서대로 코드를 작성하니 "Apple"이 출력되었습니다. 그러면 강의에서 "Orange"가 출력된 것은 LIKE_APPLE의 정의가 헤더파일을 포함시키는 부분 뒤에 있기 때문이 아닌가요? 이 경우에는 LIKE_APPLE의 정의가 그 아래에 포함된 헤더파일에 영향을 미친다고 할 수 있지 않나요? (윈도우, mingw64, vs code 사용중입니다)
- 미해결홍정모의 따라하며 배우는 C++
Vscode 이용하기
안녕하세요 항상 질좋은 강의 감사드립니다. 개인적인 질문과 바램이라 그냥 넘어가셔도 됩니다. 제가 파이썬을 자주 사용하며 vscode를 애용하는데 c/c++도 vscode로 이용하려 하는데 뭔가 g++? 이런거 깔고 복잡한 설정과정을 매번 번거롭게 해야하더라구요... vs studio를 따고 다운 받아 쓰기에는 아깝기도 하고.. 혹시 현업 c++분들은 vscode는 잘 안쓰시나요...?
- 미해결홍정모의 따라하며 배우는 C++
4.1 강 12:24 초때 질문이 있습니다
#include <iostream> #include <iomanip> using namespace std; namespace work1 { int a = 1; void dosomething() { a = a + 3; cout << a << endl; } } namespace work2 { int a = 2; void dosomething() { a = a + 5; cout << a << endl; } } int main() { work1::a; work1::dosomething(); work2::a; work2::dosomething(); } 여기서 선생님께서 work1::a; 와 work2::a; 를 선언하신 이유가 뭔가요?
- 미해결홍정모의 따라하며 배우는 C++
저는 영역을 제한해도 비교해도 에러가 안뜨네요.
2:40에서 저렇게 해도 저는 제한전이랑 똑같이 뜨는데요?
- 해결됨홍정모의 따라하며 배우는 C++
연습문제 관련 질문드립니다.
마지막에 내주신 연습문제에서 '기사의 좋아요를 다시 클릭했을 때'를 저는 my_article_flags ^= option_liked;로 했는데 답안에는 my_article_flags &= ~option_liked;로 되어있습니다. 마찬가지로 13:57초 부분에서도 items_flag &= ~opt3으로 하셨는데 저는 items_flags ^= opt3이라고 생각했습니다. 13:57초 부분이나 연습문제 부분이나 둘 다 같은 경우이고, ^= 을 쓰든 &= ~을 쓰든 결과는 똑같았는데 혹시 &=~ 대신에 ^=을 쓰면 안 되는 이유가 혹시 있을까요? ^=을 쓰는 것은 이해가 쉽게 가지만 오히려 &=~ 을 쓰는 경우는 이해가 잘 안 돼서 쉽게 와닿지가 않습니다 ㅠ ㅠ
- 미해결홍정모의 따라하며 배우는 C++
[9:00 부근] Mother class 멤버 변수를 Child class의 initializer list 에서 초기화하는 부분
안녕하세요, 아래의 코드에서 error 가 발생하는 부분에 대해서 문의드려요. 강의에서 교수님께서 debugger로 찍어주셨듯이 호출되는 순서는 아래와 같은데요. Mother class의 initializer list ->Mother class의 constructor -> Child class의 initializer list->Child class의 constructor. error가 나는 부분에서는 mother class의 멤버 변수가 이미 초기화되어 메모리를 차지하고 있는데 child class에서 초기화할 수 없는게 이해가 되지 않습니다. 강의에서 교수님께서 계속 반복적으로 말씀해주시는데 제가 뭔가 놓친게 있는걸까요? 호출 순서랑 아래의 에러 발생하는 이유가 매칭이 되지 않네요. 항상 답변주셔서 감사합니다. #include <iostream> using namespace std; class Mother { public: int m_i; public: Mother() :m_i(0) { cout << "Mother constructor" << endl; } }; class Child :public Mother { public: double m_d; public: Child() :m_d(2.0),m_i(1) //error 발생 { cout << "Child constructor" << endl; } }; int main() { Child c1; return 0; }
- 미해결홍정모의 따라하며 배우는 C++
46:00 헤더 파일이 필요한 이유가 궁금합니다.
교수님 유익한 강의 감사합니다. 하나의 소스파일에서 extern으로 정의하면 link가 되기때문에 다른 소스파일에서도 그 함수가 사용이 가능하잖아요. 그래서 제가 생각하기로는 헤더파일을 만들지 않아도 될것같은데 헤더파일을 만드는 이유 또는 필요성이 무엇인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
release 오류(23분)
release 모드에서 리빌드를 하고 디버깅을 했는데 강의에서와 같이 0을 출력하지 않고 그림과 같이 명령 프롬프트를 실행하지 못하는데 큰 문제가 있는 건지, 아니면 컴퓨터에 따라 다른 현상인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
signed 와 unsigned 질문
33:47에 1001 1110을 unsigned 라고 가정해야하는거 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
파일을 출력해서 배열에 저장하는 방법
안녕하십니까 C++을 열심히 수강하고 있는 학생입니다. 다름이 아니오라 csv 파일을 입력 받아 동적 배열에 입력해 주는 코드를 만들고 싶어서 코드를 짜 보았습니다. #include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; int main() { vector<int> array; ifstream fin; fin.open("info.txt"); if (fin.is_open() == false) { cout << "현재 정보가 없습니다" << endl; } else { for (int i = 0; i < 5; i++) { fin >> array[i]; cout << i << array[i] << endl; } } if (fin.is_open() == true) { fin.close(); } } 하지만 로드 하는 중에 문제가 발생하여 다음과 같은 런타임 에러가 발생합니다. 동적 배열에서 문제가 생긴 것 같은데 무엇이 문제인지 잘 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C++
[연습문제] nullptr 과 \0 관련 질문 2가지
안녕하세요. 수강생입니다. 연습문제를 풀다가 다음과 같은 현상을 발견해서 질문합니다. 첫번째 시도로 처럼 작성하였는데 정상적으로 작동하는 것을 확인하였습니다.Q1 . 그래서 다음과 같이 nullptr을 이용하여 작성하니 쓰레기 값까지 같이 출력되는 문제가 생겼습니다. nullptr을 제가 어떤식으로 잘못 사용하고 있는지 알려주실 수 있나요? 이렇게 작성한 의도는 ptr이 널 포인터가 되는 순간 작동을 종료하기 위함입니다. *아래와 같이 작성할 경우 제대로 나옵니다. NULL이 매크로로 0으로 지정되어 있어 그런 것 같습니다. Q2. 포인터에 증감 연산자 사용 문제 while (*ptr != NULL) { cout << *(ptr); ++ptr; } 라고 작성하였을 때 while 문에서 ptr++ 을 하고 *ptr을 출력하면 j 부터 시작이 되지 않습니다.++ptr로 인하여 그런 것 같은데 이경우에는 어떤식으로 초기화를 해야 j 를 출력하게 할 수 있을까요? char* ptr = name; 를 써서 초기화를 하는 줄 알았는데 그러면 할당을 여러번 한다고 컴파일 에러가 나옵니다. 읽어주셔서 감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
const 와 constexpr차이
전에 헤더 파일을 만들때는 constexpr로 만들었는데 이번엔 const를 쓰시는데 둘의 차이가 뭔가요?
- 해결됨홍정모의 따라하며 배우는 C++
(14:20) (const *Date*& original)
안녕하세요! 매번 정성스러운 답변 감사합니다. 질문이 있어요~! void copyFrom(const Date& original) { m_month = original.m_month; m_day = original.m_day; m_year = original.m_year; } 영상 (14:20)를 보면 copyFrom 함수 파라미터에 class 함수를 받는 것을 볼 수 있습니다. => (const Date& original) Q1. 어떻게 받아드릴 수 있는건가요?? Date를 넣으면 class Date의 ptrivate: 에 있는 데이터에 접근할 수 있기 때문인가요? Q2. 제가 지금 잘못 이해하고 있는 것 같은데, public: 아래로는 전부 public으로 설정이 되는건가요? 아니면 해당 function마다 그 위에 public이라고 선언해줘야 하나요? ex.) 1번 public: void function1(){} void function2(){} void function3(){} // 전부 다 퍼블릭~ 2번 public: void function1(){} // 이 친구만 퍼블릭 void function2(){} void function3(){} 어느 쪽이 맞는 public: 설정인가요?
- 미해결홍정모의 따라하며 배우는 C++
헤더파일이 인클루드되지 않습니다
헤더파일폴더에 14분에 한것처럼 헤더파일을 만들었는데 cpp파일에서 인클루드 하려고 하면 빨간줄 뜨면서 no such file or directory 라고하면서 에러가 납니다 그리고 댓글로 질문을 올린다는 것이 무슨말인지 모르겠어요
- 미해결홍정모의 따라하며 배우는 C++
버퍼에 대해 알고싶습니다
int main() { char a = '65'; cout << a; cin >> a; cout << a; } 여기서 처음 a 를 출력하면 5가나오는 이유는 무엇인가요? 그리고 6은 어떻게 되는건가요? 버퍼에서 사라지는건가요?