728x90

프로그래밍 138

[C/C++] 예제_영어 문자열을 입력받아 대-소-대-소문자로 변경하기

작성시 발생했던 오류 1. 배열을 초기화를 시키지 않아서 쓰레기값이 출력할때 발생했습니다. - 쓸모없는 문자들이 왜 발생하는지, 처음에는 sizeof(str)로 조건식을 처리하고있기 때문에 값이 들어가있지 않은 배열 (ex_299번째 배열)에 쓰레기값이 당연히 들어있어서 저렇게 나오는것으로 생각하고 값이 들어있는 배열칸 이외에는 제외하고 계산을 해보려고 했으나. 현재까지 배운 함수로는 해결방법을 찾을 수 없었습니다. - 그 다음 삭제하는 방법을 소스코드 뒤쪽에서 처리하려고 NULL값도 줘보고, 원하는 값을 제외한 값이 들어올 경우 NULL로도 처리해보려고 했지만 해결이 되지 않았습니다. - 배열을 초기화시켜보니 해결이 깔끔하게 완료되었습니다. 2. 앞에서 선언을 안해주거나, 여러 예제들을 공부중이라 ma..

[C/C++] Swap 예제를 통해 포인터 맛보기

포인터 변수는 메모리에 할당되기때문에 주소값이 존재합니다. 포인터는 변수의 주소값을 저장하기 위해서 사용합니다. 변수는 주소값과 해당 주소값에 저장되어있는 할당된 값으로 이루어져있습니다. 정수형 포인터는 아래와 같이 [ 데이터 타입 ][ * ] [ 변수명 ] [ ; ] int * ptrNumber ; 이렇게 구성되어있습니다. 주소값을 대입할때는 동일한 데이터 타입으로 대입해야 하며, &기호를 사용합니다. ptrNumber = &number; number 변수의 주소를 ptrNumber에게 매칭합니다. 이 과정을 참조한다고 표현합니다. 주소값이 가지고 있는 실제로 할당된 값에 접글할 때는 *기호를 사용합니다. printf("ptrNumber가 갖고있는 값: %d \n", *ptrNumber); 이 과정을 ..

[C/C++] 로또 번호 셔플 예제

로또번호 셔플 예제입니다. #include #include // random 헤더파일 #include // time헤더파일 #include //sleep을 위한 헤더파일 using namespace std; //namespace std선언 void shuffle(); void ShuffleOnce(int* firstNumber, int* secondNumber); int main() { setbuf(stdout, NULL); // macOS에서 sleep을 줄때 버퍼를 없애기 위함 shuffle(); } void shuffle() { // {배열의 선언과 초기화 int numbers[45] = {0,}; for(int i = 0; i< 45; i++) { numbers[i] = i+1; } //배열의 선..

C++ 컴파일 과정

일반적으로 컴파일은 아래의 순서로 이루어집니다. 전처리 과정(preprocessor) 컴파일 과정(compiler) 어셈블러 과정(assembler) 링킹 과정(linker) 전처리 과정 소스 코드 파일을 전처리기가 처리한다. .cpp로 된 텍스트 파일(소스코드)의 주석을 제거하고, 헤더파일을 삽입하며 매크로를 치환하여 적용합니다. * 여기서 매크로는 #define 뒤에 적혀있는것을 의미합니다. #define Pi 3.14 라고 써있으면 PI가 매크로, 3.14는 매크로 상수라고 부르며 PI라는 문자를 3.14로 치환해줍니다. 컴파일 과정 전처리된 소스코드를 컴파일러가 문법 및 구문을 검사하며, 어셈블러에 넘기기 전 중간 코드를 생성합니다. front-end, middle-end, back-end 크게 ..

메모리의 구조(Memory Structure)

앞서서 간단하게 컴퓨터의 구성요소와 프로그램에 대해서 알아보았다. https://kyungtaek.tistory.com/12 간단한 컴퓨터의 구성요소 및 프로그램 동작이해 먼저 컴퓨터 구성요소를 보면 크게 아래와 같이 나뉘어져 있다. 모니터(출력장치) 키보드,마우스(입력장치) 하드디스크(HDD, SSD),비휘발성 저장장치 : 싸지만, 느리다 메모리(RAM), 휘발성 저장장치 kyungtaek.tistory.com 이번에는 RAM(메모리)에 대해서 좀 더 자세히 알아보고자 한다. 프로그램을 실행 할 경우, CPU에서 연산을 수행하여 메모리에 공간을 할당해준다. 그 공간은 4가지로 나누어서 각각의 역할을 수행한다. • 스택(Stack) • 힙(Heap) • 데이터(Data) • 코드(Code) 1. 코드 영..

배열(array) 예제와 함께 가볍게 알아보기

배열은 둘 이상의 변수를 연속적으로 모아 놓은 것이다. 프로그램에서 지역변수 선언해주게 되면 메모리는 차곡차곡 쓰는것이 아니라, 공간상에 비어있는곳에 아무렇게나 할당된다. (무규칙하다) 그러나 배열을 통해 변수를 선언하게 되면 첫번째 주소는 무규칙 >> 두번째 주소는 첫번째 주소에 딱 붙여서 생긴다. 즉 공간을 효율적으로 사용할 수 있기 때문에 공간을 아낄 수 있다. 참고로 아래 사진에서 배열은 데이터형이 int이기 때문에 각각의 공간 하나는 4byte이다. int numbers[5]는 4byte * 5 = 20byte를 메모리에서 차지한다. 배열의 선언방법 1) int numbers[5]; numbers[0] = 1; ~~~~~ 입력해주기 2) int numbers[5] = {1,2,3,4,5}; >>..

형변환(type casting)

형변환은 잘 쓰지않는다. 이런것이 있다는내용만 알고있으면 된다. 자료형을 강제로 변환하는 기능이다. 값의 손실이 일어날 수 있다. 정상적인 형변환( 아래 코드를 수행하면 A의 아스키코드인 65가 출력된다.) // 형변환 테스트 #include void Description002(); // 형변환 테스트 함수 int main(){ Description002(); } void Description002() { // 캐스팅 테스트 char char_ = 'A'; int int_ = char_; //float floatValue = 100.123; //int_ = floatValue; printf("int_ 변수 안에 무슨 값이 들어있나? %d \n",int_); } 비정상적인 형변환 (아래 코드를 수행하면 0..

[오류_C/C++] clang: error: linker command failed with exit code 1 (use -v to see invocation) 에러

문제, 오류내용 clang: error: linker command failed with exit code 1 (use -v to see invocation) 에러 당당하게 적혀있는 에러를 볼 수 있다. 오류가 발생한 코드는 아래와 같다. #include #include //시간 #include //rand,srand #include // 대체 #include int main(){ setbuf(stdout, NULL); // 버퍼링 비활성화 int dice = 0; int dice2; srand(time(NULL)); printf("주사위의 숫자는 : "); dice2 = getch(); if(dice2 == 1){ for(int count = 0; count < 3; count++){ sleep(1);..

[C/C++]while, for, switch, rand 알아보기

1. while 문 구조 while(조건식){ 내용 } 중괄호{}안의 내용은 Continue와 break를 통해 제어할 수 있다. 조건식이 참인경우 계속해서 내용을 반복한다. 조건식이 거짓인 경우, while문을 종료한다. 위에서 알수있는점 1. continue; 를 만나게 될경우 continue; 아래내용은 수행하지 않고 다시 while문 처음으로 돌아간다. 2. break;을 만나게 될경우 아래내용은 수행하지 않고, while문에서 탈출한다. 2. for문 구조 for(초기값 ; 조건식 ; 수식){ 내용 } 변수선언 > 조건이 참일경우 > 내용수행 > 수식 > 조건식 > 내용 > 수식 3. switch 문 구조 switch(조건문){ case 값1: 내용 ; break; case 값2: 내용 ; br..

C 예제 2번째 (홀짝게임)

For, while, random관련내용을 배우고 수행한 예제이다. 홀짝게임 (첫번째 코딩) //홀짝 게임 //컴퓨터가 주사위를 2번 굴린다. //플레이어는 숫자를 미리 볼 수 있다. 총합이 홀수인지, 짝수인지 출력한다.(Easy) //플레이어는 숫자를 미리 볼 수 없다. 플레이어가 홀,짝을 맞춰야한다.(Normal) #include #include #include #include #include // 윈도우에서는 이다. int main(){ int dice,dice2; int randomNumber1,randomNumber2,randomNumber3,randomNumber4; int diceSum,diceSum2; char mode; srand(time(NULL)); randomNumber1 = (ra..

728x90