본문 바로가기

Computer & Program/잡다한 이모저모55

[C++]cin의 함정 피하기 C/C++ 코딩을 하는 사람이라면 이런 오류로 골머리를 썩은 적은 최소한 한번은 있을 것이다. 만약에 없다면 이 글은 볼 필요가 없다. 내용은 즉슨 cin or scanf 등으로 키보드로부터 값일 입력 받는데 int 형을 받아야 하는데 char가 들어온다던지 하면 이상한 error가 뜬다. 라기보다 프로그램 실행 중이면 무한 loop에 빠지게 된다. 그것을 막아주는 아주 요긴한 코드를 설명하려고 한다. 참고로 환경은 C++이다. 제목부터 cin이기 때문이다. ㅋㅋ 우선 헤도파일로 #include 를 넣어 준다. 이것을 넣어 주는 이유는 INT_MAX를 사용하기 위해서이다. 그리고 cin을 통해 값을 입력 받고나면 그 아래줄에 (이후부터는 말보다는 코드와 주석으로 설명하겠다. 그게 보기 편함으로...)wh.. 2009. 7. 18.
01.리눅스 개요 - 리눅스 역사 리눅스는 윈도우 XP와는 달리 얼마든지 내부를 들여다 볼수 있는 오픈 소스이다. 핀란드 헬싱키 대학의 학생이었던 리누스 토발즈에 의해 만들어진 리눅스는 유닉스(UNIX)에서부터 시작되었다. 그런 의미에서 유닉스를 잠시 보면 유닉스는 1969년 미국 AT&T사의 벨연구소에 있던 켄 톰슨 어셈블리 언어로 개발되었다가 1972년에 데니스 리치가 C언어로 다시 작성하였다. C언어로 작성한 것은 큰 의미를 가졌는데 왜냐하면 어셈블리어로 작성을 하면 시스템 종속적이었던 것을 조금의 수정을 통해 다양한 플렛폼에 이식할 수 있게 된 것이다. 그 이후로 수 많은 유닉스가 개발되었는데 그러다보니 상호 호환성 문제와 이식성 문제가 대두 되었는데 이를 해결하기 위해 유닉스 표준화를 시도하였다. 그 결과 만들어 진 것이 POS.. 2009. 7. 16.
유닉스 기본 명려어 ▷ passwd - 비밀번호의 설정과 변경 ex) $ passwd passwd : student용 암호를 변경하는 중 기존 고르인 암호를 입력하시오 : 새 암호 : 새 암호를 다시 입력하시오 : ▷ man - 매뉴얼 참조하기 ex) $ man 명령어(실행파일) ▷ pwd - 현재 위치해 있는 디렉토리 ▷ cd - 디렉토리 이동 ▷ mkdir - 디렉토리 생성 ▷ rmdir - 디렉토리의 삭제 ex) $ rmdir -p abc/abbc -p : 특정 디렉토리를 포함한 하위 모든 디렉토리 삭제시 옵션 ▷ ls - 디렉토리 및 파일목록출력 -a : 디렉토리 내의 모든 파일 출력 -l : 파일허영여부, 소유자, 그룹, 크기, 날짜 등을 출력 -s : KB 단위의 파일 크기를 출력한다. -t : 최근에 만들어진 .. 2009. 7. 6.
특수기호 이름들 ! Exclamation Point 엑스클러메이션 포인트 " Quotation Mark 쿼테이션 마크 # Crosshatch/Sharp/Pound Sign 크로스해치/샵/파운드 사인 $ Dollar Sign 달러사인 % Percent Sign 퍼센트사인 @ At Sign /Commercial At 앳 사인, 혹은 앳/커머셜 앳 & Ampersand 앰퍼샌드 ` (enter 바로옆) Apostrophe 어파스트로피 * Asterisk 애스터리스크 - Hyphen/Dash 하이픈/대시 . Period /Full Stop 피리어드/풀스탑 / Slash/Virgule 슬래시/버귤 \ Back Slash 백슬래시 \ Won sign 원사인 : Colon 콜론 ; Semicolon 세미콜론 ^ Circumflex .. 2009. 7. 6.
7/22 강의 [return & 주소] return타입은 오직 한개만을 return할 수 있다. 하지만 코딩을 하다보면 2개 이상의 값을 return을 해야할 때가 있다. 그럴때는 매겨변수로 값을 넘겨주는 것이 아닌 주소값을 넘겨 주는 것이다. 즉, input(temp, &valu); 로 넘겨주면 받는 함수는 void input(int temp, int *valu)로 받으면 된다. 여기서 받는 함수가 void형인 것은 주소값을 넘겨 주었기 때문에 구지 return을 통해 값을 반환할 필요가 없기 때문이다. 즉, 주소값을 통해 직접적으로 그 값에 관여할 수 있는 것이다. [기억클래스 종류] 정리하기 힘든 관계로 책 참고 바람. (귀찮은건 정말 참을수 없어~ - 3-) [배열] 배열이랑 같은 type, 같은 size를 같.. 2009. 7. 6.
7/ 15, 7/16 3, 4번째 수업 [/ 및 % 연산자] /연산자는 나눈 몫을 구하는 연사자이다. 즉 10/3을 하면 3이 나오게 된다. %연산자는 나눈 나머지를 구하는 연산자이다. 즉 10%3을 하면 1이 나오게 된다. 여기서 10/3.을 하면 어떻게 될까? 3.은 정수가 아니라 실수 이기 때문에 3.3333....이 나오게 될 것이다. [fflush(stdin)] 이 함수 fflush(stdin)인 scanf로 입력 받았을시 버퍼에 저장된 불필요한 내용들을 클리어 시켜주는 함수이다. 즉, sacnf("%d", %a); scanf("%d", &b); 를 한 경우 입력을 10 20 30 을 하면 a에는 10이 들어가고 b에는 첫번째 scanf에서 받은 불필요한 20이라는 숫자가 들어가게 된다. 이러한 현상을 막기위해 sacnf("%d", .. 2009. 7. 6.
7/21강의 [반복문의 차이] 반복문에는 크게 for문과 while문이 있다. 둘다 특정 내용을 반복한다는 데는 같지만 쓰이는 의미에서는 차이가 있다. for문인 경우 특정 구간이 있는 경우에 쓰인다. 즉, 어디서부터 어디까지 라는 조건이 있으면 주로 for문이 쓰인다는 것이다. 그리고 while문은 전체적인 프로그램을 제어하거나 무한루프를 돌때 사용된다. 물론 for 대신 while을 while 대신 for를 사용해도 상관없지만 코딩의 기술적인 면에서 차이가 난다. for문은 while과 달리 초기식, 조건식, 증감식이 다 들어 있어 while문을 사용했을 때 와는 달리 반복문 안에 증감식이 들어갈 필요가 없어 구현도 편하고 가독성도 증가한다. [분기문] 분기문에는, break : 특정 반복문이나 선택문을 벗어나는.. 2009. 7. 6.
7/14수업 C언어의 개략적인 내용 강사 : 박근여 강의 기간 : 7/14 ~ 8/1 (3주) 홈페이지 : http://myshe.realmind.net 강의실 : Q동 102호 오늘부터 "완벽 C언어 프로그래밍"이라는 강좌를 시작했다. 첫 강의라 그런지 굉~~장히 기초적인 것부터 시작을 했다. visual C++ programing 여는거 부터 시작해서 기타 등등등... 이 수업을 들어보고 괜찮다면 C++ OOP까지 듣고 아니면 혼자서 공부를 하자. 혼자서 공부하는게 얼마나 될지느 모르겠지만. 오늘 들은 강의 내용은 이렇다. 1. C언어의 대략적인 구성. 2. printf()함수 표준 입출력 함수이며 "stdio.h"를 기술해 줘야 한다. 변환문자와 제어문자 옵션을 사용할 수 있다. [제어문자] \n : New line, 줄바꿈 \r :.. 2009. 7. 6.
각종 자료형의 Sizeof 결과 요즘 제가 본의아니게 임베이디드 수업을 듣고 있는데 예전에는 1byte를 저장하는데도 char형이 아닌 그냥 int형으로 저장하곤 했는데 여기서는 그게 안통했습니다. 정확히 말하면 안 통한다기 보다는 그러니까 연산을 하는데 Error도 많고 너무나 비효율적이더군요... 무엇보다 borad 자체의 저장 공간이 그렇게 크지 않기 때문에 space complexity를 최대한 고려해서 작성을 해야 했습니다. 그래서 나중에 제가 볼려고 각종 자료 타입에 대한 sizeof와 각 크기에 따른 환산표를 준비했습니다. 참고로 대충 통일 됐다고는 하나 아직까지는 컴파일러에 따라 크기가 다 다르기 때문에 그점 감안 하시고 봐주셨으면 합니다. 아, 아래 컴파일러는 Macrosort Visuall studio 2008입니다... 2009. 7. 6.
날짜 계산 프로그램 // 날짜 계산하는 프로그램 #include void main() { int data[2][3]; long sum[2], result; int i; char name[20]; printf("입력 ]\n = Today =\n"); printf("년 ? "); scanf("%d", &data[0][0]); // 오늘의 년 printf("월 ? "); scanf("%d", &data[0][1]); // 오늘의 월 printf("일 ? "); scanf("%d", &data[0][2]); // 오늘의 일 printf("\n = Brithday =\n"); printf("이름 ? "); scanf("%s", name); // 이름 printf("년 ? "); scanf("%d", &data[1][0]); // 태.. 2009. 5. 11.
색 코드표~ 000000 black 검정 2f4f4f darkslategray 어두운푸른빛회색 708090 slategray 푸른빛회색 778899 lightslategray 밝은푸른빛회색 696969 dimgray 칙칙한회색 808080 gray 회색 a9a9a9 darkgray 어두운회색 c0c0c0 silver 은색 d3d3d3 lightgrey 밝은회색 dcdcdc gainsboro ffffff white 백색 fff5ee seashell 바다조가비 fffafa snow 설백 f8f8ff ghostwhite 허깨비백색 fffaf0 floralwhite 꽃의백색 f5f5f5 whitesmoke 백색연기 f0f8ff aliceblue 엷은잿빛바탕에푸른빛 f0ffff azure 하늘색 fdf5e6 oldlace 낡.. 2009. 3. 4.
과제29 : 숫자와 연산자 입력받아 출력 #include void main() { int num1, num2; char k; printf("입력]\n"); //첫번째 숫자 입력 받음 while(1) { printf("Num1 ? "); scanf("%d", &num1); fflush(stdin); if(num1 < 0) printf("input error, retry\n"); else break; } //계산식 입력 받음 while(1) { printf("Op ? "); scanf("%c", &k); fflush(stdin); if(k == '+' || k == '-' || k == '*' || k == '/') break; else printf("input error, retry\n"); } //두번째 숫자 입력 받음 while(1) { pr.. 2009. 3. 4.