C과제 ?된 곳 채워넣기

unsigned char StringToNum(char *name)    
{
  int loop_temp = strlen(name);

  while (1)
  {
    /* ??????? */
  }

  loop_temp = 0;

  while (1// 
구조체의 끝에 도달하면 종료
  {
    /* ?????????????? */
  }

  return (*(GROUP + loop_temp)).f_num;
  // 
일치하는 단어와 대응되는 숫자를 반환
  // 
일치하는 단어가 없으면 0반환
}

 

* 내용중에 ? 빠진부분을 검토해본결과

첫번째 while문에서는 소문자를 대문자로 대문자는 그냥 통과하는 식을 넣으면 되고

두번째 while문에서는 구조체와 비교하여 비슷한 단어가 발견되면 그 반환값을 리턴하도록 하면 된다고 생각하여 아래와 같이 작성하여 보았습니다

 

unsigned char StringToNum(char *name)
{
  int loop_temp = strlen(name);
  /* 
소문자 -> 대문자 변환 */
  while (1)
  {
    --loop_temp;

    if('a'<= name[loop_temp]&&name[loop_temp] <= 'z')
    {
      name[loop_temp] = name[loop_temp] - 32;
    }

    if(0==loop_temp)
    {
      break;
    }
  }
  loop_temp = 0;
  /* 
명령어에 대응하는 hex 반환 */
  while (1// 
구조체의 끝에 도달하면 종료
  {
    if(0 == strcmp(GROUP[loop_temp].name,name))

//strncmp 할경우 한자만 입력해도 반응을 하게 됩니다 mz md경우 적용이 않되는 문제가 발생하여 strcmp 처리해 주었습니다
    {
      break;
    }
    loop_temp++;
    if(loop_temp == 13)
    {
      break;
    }
  }
//  return (*(GROUP + loop_temp)).f_num;
아래와 같은뜻
  return GROUP[loop_temp].f_num;
  // 
일치하는 단어와 대응되는 숫자를 반환
  // 
일치하는 단어가 없으면 0반환
}

switch문을 활용하여 반환된 값을 선택하여 출력하도록

    switch(out)
    {
      case 0 : 
          CDFunction();
          break;
      case 6 : 
          printf("MC\n");
          break;
      case 1 : 
          printf("MD\n");
          break;
      case 7 : 
          printf("code\n");
          break;
      case 8 : 
          printf("data\n");
          break;
    }

몇 가지를 테스트 해보았습니다 정상적으로 출력하는 것을 확인 할 수 있었습니다

 

 

 

 

 

API

 

win 32 console = int main

win32 app = WinMain

 

첫번째 예제에 정의 되어 있는 파일

-WinMain, WndProc

 

윈도우즈를 만드는 과정

 

WndClass정의

ò

RegisterClass

ò

CreateWindow

ò

ShowWindow

ò

메시지루프

 

정의 -> 클래스를 등록 -> 메모리상의 윈도우 생성 -> 윈도우 화면에 출력 -> 메시지 루프

 

WNDCLASS

: window 클래스 관련 구조체 ->이부분을 이용하여 WndClass정의

 

메시지루프

: 사용자가 보내는 메세지

 

WndProc

:윈도우의 메시지 처리 함수를 지정하는데 메시지루프에서 보낸 메세지를 처리하는 곳

 

예제 + 주석달기

#include<windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst; //
프로그램의 인스턴스 핸들
LPCTSTR lpszClass = TEXT("First");

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevlnstance, LPSTR lpszCmdParam, int nCmdShow)
{
  HWND hWnd;
  MSG Message;
  WNDCLASS WndClass;
  g_hInst = hInstance;  //
 윈도우 클래스를 등록하는 프로그램 번호
  
  /* 1. WndClass 
정의 */
  WndClass.cbClsExtra= 0;     //
예약영역을 사용하지 않음
  WndClass.cbWndExtra = 0;    //
예약영역을 사용하지 않음
  WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //
윈도우의 배경색 지정
  WndClass.hCursor = LoadCursor(NULL,IDC_ARROW);   //
마우스 지정
   WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);   //
아이콘 지정
  WndClass.hInstance=hInstance;
  WndClass.lpfnWndProc=WndProc;
  WndClass.lpszClassName=lpszClass; //
윈도우 클래스의 이름을 문자열로 정의
  WndClass.lpszMenuName=NULL; //
사용할 매뉴를 지정 (NULL = 사용하지 않음)
  WndClass.style=CS_HREDRAW|CS_VREDRAW; //
윈도우의 스타일을 정의
  
  /* 2. Class
등록 */  
  RegisterClass(&WndClass);
  
  /* 3. 
메로리상에 윈도우 생성 */
  hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
    NULL,(HMENU)NULL,hInstance,NULL);
  /* 4. 
윈도우의 상의 화면 출력 */
  ShowWindow(hWnd,nCmdShow);
  /* 5. 
메시지루프 */
  while(GetMessage(&Message,NULL,0,0)){
    TranslateMessage(&Message);
    DispatchMessage(&Message);
  }
  return(int)Message.wParam;
}
/* 
메시지루프에서 메시지를 받아서 처리 */
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
  switch(iMessage){
  case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
  }
  return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

 

Posted by mantwo