기타 강좌

 정체불명 강좌 ver.4개의벽.rock발라드 구구단
안녕하세요 저도 c언어에 대해 거의 문외한 이지만 아직
printf함수를 쓰는것도 어려워하시는분들이 많으신거 같아 한번 강좌를 써보려고 합니다
제가 쓰는 강좌의 내용은 모두 틀릴수 있는 내용이고 보증도 하지 않습니다
틀린내용을 일부러 적을수도 있으니 이점 감안하시고 보시기 바랍니다.
자 이정도면 부담없이 쓰거나 해도 괜찮겠죠?
질문이나 조언, 태클, 좋은아이디어 모두 환영입니다
제 이메일 주소로 보내주시기 바랍니다
indistinct4869.gmail.com.png



이번에는 rock발라드 구구단을 만들어 볼 생각인데요
이 프로그램은 midi파일을 실행시키고, 구구단을 출력하는 예제입니다
우선 다음 코드를 컴파일 하고 실행시켜 보시기 바랍니다 컴파일과 실행은 시작의 반 편에서 알려드렸습니다
#include<stdio.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib") //dev c++사용하시는 분은 project>project option>parameters>c:Dev-Cpplib dev cpp가 설치된 폴더의 lib폴더 안의 libwinmm.a를 Linker에 추가해주세요

int main(){
 mciSendString("LetItBe.mid",NULL,0,NULL);
 for(;;){
  for(int i=2;i<=9;i++){
   for(int j=2;j<=9;j++){
    printf("%d * %d = %dn",i,j,i*j);
    Sleep(500);
    }
   }
  }
 }
혹시 재생이 안되시는 분은 트레이 아이콘에서 볼륨을 "더블"클릭하셔서 소리가 안나게 되어있는지 확인해보시기 바랍니다
또 실행파일과 같은 폴더 안에 letitbe.mid라는 파일이 있는지 확인해보시기 바랍니다
그리고 Visual Studio 환경에서 컴파일 실행하시는분들은 Debug폴더가 아닌 Project소스가 있는 폴더안에 letitbe.mid가 있어야 합니다 예를들어서
C:Documents and Settings정체불명My DocumentsVisual Studio 2008Projects프로젝트이름프로젝트이름 이 폴더안에 mid파일을 넣어주시면 되겠습니다실행화면.PNG

락발라드 소스코드.PNG 

우선 그냥 구구단프로그램을 우선 한 단만 나오도록 구현해 봅시다
중첩 루프를 사용하는거 보다 우선 하나의 루프만 사용해보는게 더 편할테니깐요
for,if,while 문은 뒤에 ;를 붙이지 않습니다 대신 ;이 있는 명령과 한 셋트입니다
for(;;)명령;이런식으루요 그렇다면 명령을 여러개 넣고 싶을때에는 어떻게 하느냐구요?
그럴떄에는 중괄호를 사용해주시면 됩니다
for(;;){명령;명령;명령;}이런식으루요 c언어에서는 프리 포멧을 지원하기떄문에 공백을 한칸으로 두던 두칸으로 두던 탭으로 두던 한줄 넘기던지 상관이 없습니다(단 전처리기는 예외로 한줄에 하나씩만 가능,전처리기는 세미콜른도 붙이지 않음 컴파일 이전에 하는거니깐!)
아 for(;;)가 무슨 뜻인지 모르는 분을 위해서 간단한 예제를 하나 작성 해보도록 합시다
for(;;) printf("무한반복되는 글자");
위와 같이 프로그래밍 하면 ""안에 있는 글자가 무한히 반복되면서 cpu점유율이 100퍼센트가 되는데요 for(;;)문의;두번째세미콜른(조건을 확인하는 곳)앞에 아무것도 적어주지 않으시면 무한 루프가 된답니다
무한루프를 빠져나가기 위해서는 break;문을 적어주거나 조건을 만족해야하는데 조건이 없으므로 break;문으로 빠져나갈수 밖에 없습니다

자 이제 3단만 나오는 구구단입니다
#include<stdio.h>//printf()를 사용하기 위해서
#include<conio.h>//getch();라는 함수를 사용하기 위해사
int main(){
 for (int i=2; i<=9;i++)
  printf("3*%d = %dn", i, 3*i);
 getch();//키입력받기 전까지 끄지 않도록 대기
 }
참 쉽죠? for문을 사용하면서 초기값으로 i를 2로 정해주었습니다 초기값을 적는곳에 더 많은 초기값을 적고 싶으면 쉼표 구분으로 더 많이 적어줄수 있답니다
그리고 i가 9보다 작거나 같을때(같거나 작을떄가 아니란걸 유의)루프를 계속돌구요 루프를 빠져나오기 위해서 한번 돌때마다 i++를 해주는군요 i++는 i자신의값에 1씩 더한다는 뜻입니다

 


다음 소스는 midi파일을 재생하는 소스인데요
#include<conio.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib") //dev c++사용하시는 분은 project>project option>parameters>c:Dev-Cpplib dev cpp가 설치된 폴더의 lib폴더 안의 libwinmm.a를 Linker에 추가해주시구요
int main () {
  mciSendString("LetItBe.mid",NULL,0,NULL);//같은 폴더안에 있는 letitbe라는 mid파일을 실행시킵니다
   getch();//바로 콘솔이 끝나면 소리를 못 들으므로 키입력을 받기전까지 대기하게해주는 함수입니다
}

전처리기만 약간 다를뿐 함수 하나로 간단하게 끝이나죠? google에서 mciSendString을 검색해보시면 더 자세한 사용법을 얻으실수 있습니다

 


자 이제 구구단을 말그대로 2*2부터 9*9까지 만들어 보고 두개를 합쳐봅시다
#include<stdio.h>
#include<conio.h>
int main(){
 for(int i=2;i<=9;i++){
  for(int j=2;j<=9;j++){
  printf("%d * %d = %dn",i,j,i*j);
   }
  }
  getch();
 }

 


구구단이 완성되었구요 이제 두가지를 합쳐봅시다
우선 전처리기를 선언해주구요 구구단용과 midi용 둘다선언합니다 중복되지 않게요
#include<stdio.h>
#include<conio.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib") //dev c++사용하시는 분은 project>project option>parameters>c:Dev-Cpplib dev cpp가 설치된 폴더의 lib폴더 안의 libwinmm.a를 Linker에 추가해주시구요
int main(){//int main()은 하나입니다
 mciSendString("LetItBe.mid",NULL,0,NULL);//같은 폴더 안에 있는 letitbe라는 mid파일을 실행하고
 for(int i=2;i<=9;i++){//구구단을 출력하는군요
  for(int j=2;j<=9;j++){
   printf("%d * %d = %dn",i,j,i*j);
   }
  }
 getch();
 }

 

 

그런데 문제가 있습니다 노래가 나오는데 구구단은 그냥 한번 쫙 출력되고 마는군요
0.5초에 한번씩 출력되게 바꾸려면 printf문 아래쪽에 Sleep(500);이라고 적어줍시다(S자가 대문자라는것에 유의)
그러면 한번 출력되고0.5초 쉬고 다시 출력됨을 반복합니다
그런데 노래가 끝나기 전에 구구단이 이미 끝나버렸죠?
구구단을 무한 반복하도록 바꿔봅시다 전에 배운 for(;;)무한 루프를 이용해서요~
#include<stdio.h>
//#include<conio.h>//무한루프를 돌기에 getch가 필요없어져서 주석으로 지웠으니 이것도 필요가없겠지요? 주석으로 지웠습니다
#include <windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib") //dev c++사용하시는 분은 project>project option>parameters>c:Dev-Cpplib dev cpp가 설치된 폴더의 lib폴더 안의 libwinmm.a를 Linker에 추가해주시구요
int main(){//int main()은 하나입니다
 mciSendString("LetItBe.mid",NULL,0,NULL);//같은 폴더 안에 있는 letitbe라는 mid파일을 실행하고
 for(;;){
 for(int i=2;i<=9;i++){//구구단을 출력하는군요
  for(int j=2;j<=9;j++){
   printf("%d * %d = %dn",i,j,i*j);
   Sleep(500);
   }
  }
  }
 //getch();//무한루프이므로 키입력을 받을 필요가 없어져서 주석으로 지웟습니다
 }
자 드디어 끝까지 왔군요 정체불명의 강좌 다음편을 기대해주세요~


List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 912
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 798
C언어 [C언어] 방향키 이동 [깔끔하고 완벽 구동] 8 file [Dark].Angel 2009.01.13 13443
플러그인 초고속 카매라 같은 효과를 만드는 Twixtor 플러그인 아방스 2011.12.16 13335
어도비 프리미어 [어도비 프리미어 CS6] 흔들림 보정 어렵지 않아요~. file 아방스 2013.03.13 11555
OSX (맥) 맥(OSX) 매버릭스,요세미티 에서 FTP 서버열기 3 file 아방스 2014.11.13 11522
기타 멋있는 영어 이름ㅇㅅㅇ/ 16 아방스 2008.05.22 10338
어도비 프리미어 [프리미어 프로] 검은색 배경이 있는 자막 만들기 아방스 2016.12.19 10156
플러그인 [플러그인] Optical Flares 1.2.132 버전 패치 2 아방스 2010.11.22 8495
기타 캠타시아 사용법 강좌 11 아방스 2008.03.26 8470
플러그인 [에펙] 피부톤 보정 플러그인 Beauty Box file 아방스 2013.01.07 8078
OSX (맥) 맥 OSX - 휴지통 비워지지 않는 파일 삭제하기. 아방스 2015.01.06 8038
기타 거북명령 프로그램으로 별모양으로 동그라미로 하기 5 프로즌 2008.04.19 7482
플러그인 After effect cs 5.5 plugin 손떨림 보정 플러그인 Warp stabilize 아방스 2011.12.16 7324
플러그인 VC Reflect [반사되는 이미지 만드는 플러그인] 1 file 아방스 2012.03.28 7024
기타 파이썬 총 강좌파일 올립니다... 3 file - 하늘 - 2009.09.10 7010
에프터 이펙트 에펙 단축키 깔끔한정리~ ^^ file 아방스 2012.09.13 6663
C언어 [C언어] (콘솔) 글씨 색깔 바꾸기 1 [Dark].Angel 2009.01.14 6459
기타 캠타시아 설정 방법. 3 아방스 2008.03.09 6435
Vegas Pro 베가스 8 - 분할 / 자르기 / fade in/ out 아방스 2008.06.08 6228
기타 c언어로 간단한 계산기 만들기 3 아방이 2008.01.23 6096
에프터 이펙트 에펙 aec 파일 불러오기 오류 'After Effects error : Failed to connect to Adobe Premiere Pro Dynamic Link. (86 :: 1) file 아방스 2016.07.13 5965
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19