기타 강좌

 정체불명 강좌 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 890
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 761
C언어 같은 그림맞추기 오타정정과 약간 수정한 최종 버전입니다. 3 file 정체불명 2012.01.19 2917
C언어 같은 그림맞추기 구현 체크와 엔딩 정체불명 2012.01.19 2251
C언어 같은 그림 찾기를 구현 1 정체불명 2012.01.19 2604
C언어 같은 그림 맞추기 구현 - 출력,입력 정체불명 2012.01.19 2171
Vegas Pro 같은 공간에 같은 인물 등장 하도록 편집 2 file 아방스 2012.11.06 2941
플러그인 [플러그인] Optical Flares 1.2.132 버전 패치 2 아방스 2010.11.22 8481
시네마4D [플러그인] HDRI Light Kit Pro version 1.5 file 아방스 2010.11.22 3256
어도비 프리미어 [프리미어프로] 음성변조 효과 적용 하기 아방스 2017.01.01 583
어도비 프리미어 [프리미어프로] 시계 애니메이션 만들기 file 아방스 2017.01.08 3421
어도비 프리미어 [프리미어프로] 사진으로 영상만들어 유튜버 되어보자 아방스 2017.02.05 89
어도비 프리미어 [프리미어프로] 매드무비 제작 팁 스킬창 확대해 보여주기 아방스 2017.02.05 166
어도비 프리미어 [프리미어프로] 레이아웃 초기화 및 저장,삭제 방법 아방스 2017.02.05 584
어도비 프리미어 [프리미어프로cc2017] 자동으로 길이 조절 되는 자막 바 file 아방스 2017.08.01 5013
어도비 프리미어 [프리미어프로cc2017.1] 제목 메뉴와 자막 템플릿이 사라졌어요! 아방스 2017.08.01 987
어도비 프리미어 [프리미어프로cc2017.1] 자막바 길이자동 조절 ver. 2 file 아방스 2017.08.01 473
어도비 프리미어 [프리미어프로cc2017.1] 애니메이션 자막 템플릿 만들어보기 아방스 2017.08.01 458
어도비 프리미어 [프리미어cc2017] 프록시 편집에 대해서 아방스 2017.08.01 789
어도비 프리미어 [프리미어CC 신기능] 마스크 추적 사용법 알아보기 아방스 2017.08.01 326
어도비 프리미어 [프리미어cc 2015 강좌] pip 효과 만들기 아방스 2016.12.19 202
어도비 프리미어 [프리미어 프로] 영상 회전시키기 (거꾸로 촬영된경우) 아방스 2017.08.01 1835
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19