Computer_IT/C++ 2007.02.06 20:50
example>
WinExec("sndvol32.exe /rec", SW_SHOW);
posted by 고급코드 고급코드
Computer_IT/C++ 2006.11.23 02:41
  1. #include <stdlib.h>
  2. #include <Windows.h>
  3. #include <stdio.h>
  4. HANDLE wHnd;    // Handle to write to the console.
  5. HANDLE rHnd;    // Handle to read from the console.
  6. int main(int argc, char* argv[]) {
  7.     // Set up the handles for reading/writing:
  8.     wHnd = GetStdHandle(STD_OUTPUT_HANDLE);
  9.     rHnd = GetStdHandle(STD_INPUT_HANDLE);
  10.     // Change the window title:
  11.     SetConsoleTitle("Win32 Console Control Demo");
  12.     // Set up the required window size:
  13.     SMALL_RECT windowSize = {0, 0, 79, 49};
  14.    
  15.     // Change the console window size:
  16.     SetConsoleWindowInfo(wHnd, TRUE, &windowSize);
  17.    
  18.     // Create a COORD to hold the buffer size:
  19.     COORD bufferSize = {80, 50};
  20.     // Change the internal buffer size:
  21.     SetConsoleScreenBufferSize(wHnd, bufferSize);
  22.     // Set up the character buffer:
  23.     CHAR_INFO consoleBuffer[80*50];
  24.     // Clear the CHAR_INFO buffer:
  25.     for (int i=0; i<80*50; ++i) {
  26.         // Fill it with white-backgrounded spaces
  27.         consoleBuffer[i].Char.AsciiChar = ' ';
  28.         consoleBuffer[i].Attributes =
  29.             BACKGROUND_BLUE
  30.             BACKGROUND_GREEN
  31.             BACKGROUND_RED
  32.             BACKGROUND_INTENSITY;
  33.     }
  34.     // Set up the positions:
  35.     COORD charBufSize = {80,50};
  36.     COORD characterPos = {0,0};
  37.     SMALL_RECT writeArea = {0,0,79,49};
  38.     // Copy to display:
  39.     WriteConsoleOutput(wHnd, consoleBuffer, charBufSize, characterPos, &writeArea);
  40.     // How many events have happened?
  41.     DWORD numEvents = 0;
  42.     // How many events have we read from the console?
  43.     DWORD numEventsRead = 0;
  44.    
  45.     // Boolean flag to state whether app is running or not.
  46.     bool appIsRunning = true;
  47.     // If we set appIsRunning to false, the program will end!
  48.     while (appIsRunning) {
  49.         // Find out how many console events have happened:
  50.         GetNumberOfConsoleInputEvents(rHnd, &numEvents);
  51.         // If it's not zero (something happened...)
  52.         if (numEvents!=0) {
  53.             // Create a buffer of that size to store the events
  54.             INPUT_RECORD *eventBuffer = new INPUT_RECORD[numEvents];
  55.             // Read the console events into that buffer, and save how
  56.             // many events have been read into numEventsRead.
  57.             ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead);
  58.             // Now, cycle through all the events that have happened:
  59.             for (unsigned int i=0; i<numEventsRead; ++i) {
  60.                 // Check the event type: was it a key?
  61.                 if (eventBuffer[i].EventType==KEY_EVENT) {
  62.                     // Yes! Was the key code the escape key?
  63.                     if (eventBuffer[i].Event.KeyEvent.wVirtualKeyCode==VK_ESCAPE) {
  64.                         // Yes, it was, so set the appIsRunning to false.
  65.                         appIsRunning = false;
  66.                    
  67.                     // Was if the 'c' key?
  68.                     } else if (eventBuffer[i].Event.KeyEvent.uChar.AsciiChar=='c') {
  69.                         // Yes, so clear the buffer to spaces:
  70.                         for (int i=0; i<80*50; ++i) {
  71.                             consoleBuffer[i].Char.AsciiChar = ' ';
  72.                         }
  73.                         // Redraw our buffer:
  74.                         WriteConsoleOutput(
  75.                             wHnd, consoleBuffer, charBufSize, characterPos, &writeArea);
  76.                     }
  77.                 } else if (eventBuffer[i].EventType==MOUSE_EVENT) {
  78.                     // Set the index to our buffer of CHAR_INFO
  79.                     int offsetPos =
  80.                         eventBuffer[i].Event.MouseEvent.dwMousePosition.X
  81.                         + 80 * eventBuffer[i].Event.MouseEvent.dwMousePosition.Y;
  82.                     // Is it a left click?
  83.                     if (eventBuffer[i].Event.MouseEvent.dwButtonState
  84.                         & FROM_LEFT_1ST_BUTTON_PRESSED) {
  85.                         // Yep, so set with character 0xDB (solid block)
  86.                         consoleBuffer[offsetPos].Char.AsciiChar = 'O';
  87.                         // Redraw our buffer:
  88.                         WriteConsoleOutput(
  89.                             wHnd, consoleBuffer, charBufSize, characterPos, &writeArea);
  90.              
  91.                     // Is it a right click?
  92.                     } else if (eventBuffer[i].Event.MouseEvent.dwButtonState
  93.                         & RIGHTMOST_BUTTON_PRESSED) {
  94.                         // Yep, so set with character 0xB1 (50% block)
  95.                         consoleBuffer[offsetPos].Char.AsciiChar = 'b';
  96.                         // Redraw our buffer:
  97.                         WriteConsoleOutput(
  98.                             wHnd, consoleBuffer, charBufSize, characterPos, &writeArea);
  99.              
  100.                     // Is it a middle click?
  101.                     } else if (eventBuffer[i].Event.MouseEvent.dwButtonState
  102.                         & FROM_LEFT_2ND_BUTTON_PRESSED) {
  103.                         // Yep, so set with character space.
  104.                         consoleBuffer[offsetPos].Char.AsciiChar = ' ';
  105.                         // Redraw our buffer:
  106.                         WriteConsoleOutput(
  107.                             wHnd, consoleBuffer, charBufSize, characterPos, &writeArea);           
  108.                     }
  109.                 }
  110.             }
  111.             // Clean up our event buffer:
  112.             delete eventBuffer;
  113.         }
  114.     }
  115.     // Exit
  116.     return 0;
  117. }


Console창 사이즈 조절이 가능하다.
posted by 고급코드 고급코드
Computer_IT/C++ 2006.11.23 02:37

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. // 화면을 지우는 함수.
  5. void clrscr(void)
  6. {
  7.   system("cls")
  8. }
  9. // 코드페이지 변경 함수 ( 영문 : 437 , 한글 : 949 )
  10. void SetCodePage(UINT nPage)
  11. {
  12.   SetConsoleCP(nPage);
  13.   SetConsoleOutputCP(nPage);
  14. }
  15. // 코드페이지를 얻는 함수
  16. UINT GetCodePage(void)
  17. {
  18.   return GetConsoleCP()
  19. }
  20. // 현제 커서 X 위치를 얻는 함수
  21. int wherex(void)
  22. {
  23.   CONSOLE_SCREEN_BUFFER_INFO BufInfo;
  24.   GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&BufInfo);
  25.   return BufInfo.dwCursorPosition.X;
  26. }
  27. // 현제 커서 Y 위치를 얻는 함수
  28. int wherey(void)
  29. {
  30.   CONSOLE_SCREEN_BUFFER_INFO BufInfo;
  31.   GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&BufInfo);
  32.   return BufInfo.dwCursorPosition.Y;
  33. }
  34. // 커서 위치를 설정하는 함수
  35. void  gotoxy(int x, int y)
  36. {
  37.   COORD Pos = { x , y };
  38.   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
  39. }
  40. // 글자 색깔을 변경하는 함수
  41. void  SetTextAttribute(WORD BkColor, WORD TxColor)
  42. {
  43.   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (unsigned char)((BkColor << 4) TxColor));
  44. }
  45. // 택스트를 출력하는 함수.
  46. int PrintText(int nPosX, int nPosY, const char* szFormat, ...)
  47. {
  48.   char szBuffer[512] = { 0 };
  49.   if(szFormat)
  50.   {
  51.     va_list vl;
  52.     va_start(vl, szFormat);
  53.     vsprintf(szBuffer, szFormat, vl);
  54.     va_end(vl);
  55.   }
  56.   gotoxy(nPosX, nPosY);
  57.   return fputs(szBuffer, stdout);
  58. }
  59. // 전광판과 같은 스크롤 텍스트 출력.
  60. int PrintNeonsineText(int nPosX, int nPosY, int nWidth, int nFrame, const char* szFormat, ...)
  61. {
  62.   int     i, nBufferLen;
  63.   char    szBuffer[512]   = { 0 };
  64.   char    szNeonsine[512] = { 0, };
  65.   if(szFormat)
  66.   {
  67.     va_list vl;
  68.     va_start(vl, szFormat);
  69.     nBufferLen = vsprintf(szBuffer, szFormat, vl);
  70.     va_end(vl);
  71.   }
  72.   strcpy(&szNeonsine[nFrame = (nFrame % nWidth)], szBuffer);
  73.   i = nWidth - nFrame;
  74.   if(i < nBufferLen) strcpy(szNeonsine, &szBuffer[i]);
  75.   for(i = 0 ; i < nWidth ; ++i) if(!szNeonsine[i]) szNeonsine[i] = ' ';
  76.   szNeonsine[nWidth] = 0;
  77.   gotoxy(nPosX, nPosY);
  78.   fputs(szNeonsine, stdout);
  79.   return nFrame;
  80. }
  81. void main(void)
  82. {
  83.   int   nPosX     = 0;
  84.   int   nPosY     = 10;
  85.   int   nBkColor  = 7;
  86.   int   nTxColor  = 0;
  87.   int   nWidth    = 50;
  88.   int   nFrame    = 0;
  89.   int   nSpeed    = 1;
  90.   int   nDelay    = 200;
  91.   char  szString[512] = "This is Test of Scroll String";
  92.   //              "┌──────────────────────────────────────┐"
  93.   PrintText(0, 0, "┌────┬────────┬────┬────┬────┬────┐");
  94.   PrintText(0, 1, "│POSITION│      COLOR     │ WIDTH  │ FRAME  │ SPEED  │ DELAY  │");
  95.   PrintText(0, 2, "├────┼────────┼────┼────┼────┼────┤");
  96.   PrintText(0, 3, "│%2d , %2d │%2d , %2d         │ %6d │ %6d │ %6d │ %6d │"
  97.                 , nPosX, nPosY, nBkColor, nTxColor, nWidth, nFrame, nSpeed, nDelay);
  98.   PrintText(0, 4, "│NUM-MOVE│[SHIFT + ] > / <│NUM 7/9 │        │  + / - │ 1 - 9  │");
  99.   PrintText(0, 5, "├────┼────────┴────┴────┴────┴────┤");
  100.   PrintText(0, 6, "│ String │%-46s [ ENTER ]│", szString);
  101.   PrintText(0, 7, "└────┴────────────────────────────┘");
  102.   PrintText(0, 8, "0        1         2         3         4         5         6         7         8");
  103.   PrintText(0, 9, "12345678901234567890123456789012345678901234567890123456789012345678901234567890");
  104.   while("RUN")
  105.   {
  106.     while(kbhit())
  107.     {
  108.       int nCh = getch();
  109.       // 키 입력 센서
  110.       switch(nCh)
  111.       {
  112.       case 0x1B : clrscr(); gotoxy(0,0); return;
  113.       case 0x47 : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nWidth -= 1; break;
  114.       case 0x49 : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nWidth += 1; break;
  115.       case 0x4B : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nPosX  -= 1; break;
  116.       case 0x4D : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nPosX  += 1; break;
  117.       case 0x48 : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nPosY  -= 1; break;
  118.       case 0x50 : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nPosY  += 1; break;
  119.       case '+'  : nSpeed    += 1;   break;
  120.       case '-'  : nSpeed    -= 1;   break;
  121.       case '>'  : nBkColor  += 1;   break;
  122.       case '<'  : nBkColor  -= 1;   break;
  123.       case '.'  : nTxColor  += 1;   break;
  124.       case ','  : nTxColor  -= 1;   break;
  125.       case '1'  : nDelay     =  50; break;
  126.       case '2'  : nDelay     = 100; break;
  127.       case '3'  : nDelay     = 150; break;
  128.       case '4'  : nDelay     = 200; break;
  129.       case '5'  : nDelay     = 250; break;
  130.       case '6'  : nDelay     = 300; break;
  131.       case '7'  : nDelay     = 350; break;
  132.       case '8'  : nDelay     = 400; break;
  133.       case '9'  : nDelay     = 450; break;
  134.       case '0'  : nDelay     = 500; break;
  135.       case '\r' :
  136.       case '\n' :
  137.         {
  138.           PrintText(0, 6, "│ String │%60s│", "");
  139.           gotoxy(12, 6);
  140.           gets(szString);
  141.         } break;
  142.       }
  143.       if(nPosX    <   0) nPosX    = 0;
  144.       if(nPosY    <  10) nPosY    = 10;
  145.       if(nBkColor <   0) nBkColor = 0;
  146.       if(nBkColor >  15) nBkColor = 0;
  147.       if(nTxColor <   0) nTxColor = 0;
  148.       if(nTxColor >  15) nTxColor = 0;
  149.       if(nWidth   <   1) nWidth   = 1;
  150.       if(nSpeed   <   1) nSpeed   = 1;
  151.     }
  152.     // 메뉴
  153.     PrintText(0, 3, "│%2d , %2d │%2d , %2d         │ %6d │ %6d │ %6d │ %6d │"
  154.                   , nPosX, nPosY, nBkColor, nTxColor, nWidth, nFrame, nSpeed, nDelay);
  155.     PrintText(0, 6, "│ String │%-46s [ ENTER ]│", szString);
  156.     // 글 색깔 선택
  157.     SetTextAttribute(nBkColor, nTxColor);
  158.     PrintText(22, 3, "[TEXT]");
  159.     // 스크롤 출력
  160.     nFrame = PrintNeonsineText(nPosX, nPosY, nWidth, nFrame + nSpeed, szString);
  161.     // 글 색깔 복귀
  162.     SetTextAttribute(0, 7);
  163.     // 딜레이
  164.     Sleep(nDelay);
  165.   }
  166. }

출처 : 어느분..ㅡㅡ.. (모름)
posted by 고급코드 고급코드
Computer_IT/C++ 2006.09.26 15:00

printf(%[flags] [width] [.precision] [{h | l | I64 | L}]type)

CharacterTypeOutput Format
cint or wint_tWhen used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.
Cint or wint_tWhen used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.
dintSigned decimal integer.
iint Signed decimal integer.
oint Unsigned octal integer.
uint Unsigned decimal integer.
xintUnsigned hexadecimal integer, using “abcdef.”
XintUnsigned hexadecimal integer, using “ABCDEF.”
e doubleSigned value having the form [ – ]d.dddd e [sign]ddd where d is a single decimal digit, dddd is one or more decimal digits, ddd is exactly three decimal digits, and sign is + or –.
EdoubleIdentical to the e format except that E rather than e introduces the exponent.
fdoubleSigned value having the form [ – ]dddd.dddd, where dddd is one or more decimal digits. The number of digits before the decimal point depends on the magnitude of the number, and the number of digits after the decimal point depends on the requested precision.
gdoubleSigned value printed in f or e format, whichever is more compact for the given value and precision. The e format is used only when the exponent of the value is less than –4 or greater than or equal to the precision argument. Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.
GdoubleIdentical to the g format, except that E, rather than e, introduces the exponent (where appropriate).
n Pointer to integer Number of characters successfully written so far to the stream or buffer; this value is stored in the integer whose address is given as the argument.
pPointer to voidPrints the address pointed to by the argument in the form xxxx:yyyy where xxxx is the segment and yyyy is the offset, and the digits x and y are uppercase hexadecimal digits.
sString When used with printf functions, specifies a single-byte–character string; when used with wprintf functions, specifies a wide-character string. Characters are printed up to the first null character or until the precision value is reached.
SStringWhen used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte–character string. Characters are printed up to the first null character or until the precision value is reached.

posted by 고급코드 고급코드
Computer_IT/C++ 2006.09.12 15:54
 
  1. #include <stdio.h>
  2. #include <limits.h>
  3. void main( void )
  4. {
  5.   int i;
  6.   long c;
  7.   unsigned int d;
  8.   printf(" input %ld ....  %ld : ", LONG_MIN, LONG_MAX);
  9.   scanf("%ld", &c);
  10.   d=2147483648L;
  11.   for(i=0;i<32;i++)
  12.   {
  13.    
  14.     if ( c & d )
  15.         printf("1");
  16.       else
  17.         printf("0");
  18.     d=d/2;
  19.   }
  20.   printf("\n");
  21. }
 

'Computer_IT > C++' 카테고리의 다른 글

[C] 전광판 소스...  (0) 2006.11.23
[C] printf Type Field Characters  (0) 2006.09.26
[C] Long Type의 Data형을 10진수에서 2진수로..  (0) 2006.09.12
[VC] 인라인 ASM 으로 작성한 연산  (1) 2006.08.14
[VC] MMX support 여부  (0) 2006.08.14
Example Program: A Simple Query  (0) 2006.08.07
posted by 고급코드 고급코드
Computer_IT/C++ 2006.08.14 20:55
  1. #include "stdio.h"
  2. // EAX, EBX, ECX, EDX          : 32 bit
  3. // AX, BX, CX, DX                 : 16 bit
  4. // AH, AL, BH, BL, CH, CL, DH, DL :  8 bit
  5. void main()
  6. {
  7.        int addvar, pointvar1=5, pointvar2;
  8.        int *p=&pointvar1;
  9.        int cur = 1;
  10.        int test1 = 1, test2 = 10;
  11.        printf("The Size of (int)=%d Byte\n", sizeof(int));
  12.        printf("So, %d Bit\n\n", sizeof(int)*8);
  13.        __asm // 더하기 예제
  14.        {
  15.                MOV EAX, 10             // EAX = 10
  16.                MOV EBX, 20             // EBX = 20
  17.                ADD EAX, EBX           // EAX += EBX
  18.                MOV addvar, EAX       // addvar = EAX
  19.        }
  20.        printf("ADD Test Result=%d\n", addvar);
  21.        __asm // 빼기 예제
  22.        {
  23.                MOV EAX, 10           // EAX = 10
  24.                MOV EBX, 20           // EBX = 20
  25.                SUB EAX, EBX         // EAX += EBX
  26.                MOV addvar, EAX     // addvar = EAX
  27.        }
  28.        printf("SUB Test Result=%d\n", addvar);
  29.        __asm  // 포인터 사용 예제
  30.        {
  31.                MOV EAX, 10           // EAX = 10
  32.                MOV EBX, p             // EBX = p 
  33.                ADD EAX, [EBX]      // EAX += *EBX  -> [EAX]는 EAX의 주소가 가르키는 값 
  34.                MOV pointvar2, EAX  // pointvar2 = EAX         
  35.        }
  36.        printf("Pointer Test Result=%d\n", pointvar2);
  37.   __asm  // 비교분기 예제
  38.   {
  39.           CMP cur, 1    // if(cur==1)
  40.           JE go1          // goto go1
  41.          
  42.           CMP cur, 2    // if(cur==2)
  43.           JE go2          // goto go2
  44. go1:
  45.           MOV EAX, cur    // EAX = cur
  46.           ADD EAX, 100    // EAX += 100
  47.           MOV cur, EAX    // cur = EAX
  48. go2:
  49.           MOV EAX, cur    // EAX = cur
  50.           ADD EAX, 200    // EAX += 200
  51.           MOV cur, EAX    // cur = EAX
  52.   }
  53.   printf("Compare Test Result=%d\n", cur);
  54.   __asm // 증가 예제
  55.   {
  56.           MOV EAX, test1         // EAX = test1
  57.           INC EAX                   // EAX++
  58.           MOV test2, EAX         // test2 = EAX
  59.   }
  60.   printf("test1=%d, Increased test1=%d\n", test1, test2);
  61.   __asm // 감소 예제
  62.   {
  63.           MOV EAX, test1         // EAX = test1
  64.           DEC EAX                  // EAX-- 
  65.           MOV test2, EAX         // test2 = EAX
  66.   }
  67.   printf("test1=%d, decreased test1=%d\n", test1, test2);
  68.   __asm // 치환 예제
  69.   {
  70.           MOV EAX, test1      // EAX = test1
  71.           MOV EBX, test2      // EBX = test2
  72.           XCHG EAX, EBX     // swap EAX, EBX
  73.           MOV test1, EAX      // test1 = EAX
  74.           MOV test2, EBX      // test2 = EBX
  75.   }
  76.   printf("After XCHG : test1=%d, test2=%d\n", test1, test2);
  77. }

출력결과
The Size of (int)=4 Byte
So, 32 Bit
ADD Test Result=30
SUB Test Result=-10
Pointer Test Result=15
Compare Test Result=301
test1=1, Increased test1=2
test1=1, decreased test1=0
After XCHG : test1=0, test2=1
posted by 고급코드 고급코드
Computer_IT/C++ 2006.08.14 20:47
  1. #include "stdio.h"
  2. int detect_mmx(void)
  3. {
  4.   int res, mmx;
  5.   _asm {
  6.        mov     eax, 1;
  7.        cpuid;
  8.        mov     res, edx;
  9.   }
  10.   mmx = (res & 0x00800000) ? 1 : 0;
  11.        
  12.   return mmx;
  13. }
  14. void main()
  15. {
  16.        int Detected;
  17.        Detected = detect_mmx();   // return 1이면 지원 0이면 미지원
  18.        if(Detected)
  19.                printf("MMX is Supported.\n");
  20.        else
  21.                printf("MMX is NOT Supported\n");
  22. }

CPU의 MMX지원 여부를 알수 있는 코드이다.

'Computer_IT > C++' 카테고리의 다른 글

[C] Long Type의 Data형을 10진수에서 2진수로..  (0) 2006.09.12
[VC] 인라인 ASM 으로 작성한 연산  (1) 2006.08.14
[VC] MMX support 여부  (0) 2006.08.14
Example Program: A Simple Query  (0) 2006.08.07
Const Member변수 초기화 특성  (0) 2006.04.24
LinkedList 자료  (0) 2006.04.06
posted by 고급코드 고급코드
Computer_IT/C++ 2006.08.07 13:35

  1. /*
  2. *  sample1.pc
  3. *
  4. *  Prompts the user for an employee number,
  5. *  then queries the emp table for the employee's
  6. *  name, salary and commission.  Uses indicator
  7. *  variables (in an indicator struct) to determine
  8. *  if the commission is NULL.
  9. *
  10. */
  11. #include <stdio.h>
  12. #include <string.h>
  13. /* Define constants for VARCHAR lengths. */
  14. #define     UNAME_LEN      20
  15. #define     PWD_LEN        40
  16. /* Declare variables.No declare section is needed if MODE=ORACLE.*/
  17. VARCHAR     username[UNAME_LEN]
  18. /* VARCHAR is an Oracle-supplied struct */
  19. varchar     password[PWD_LEN];   
  20. /* varchar can be in lower case also. */
  21. /*
  22. Define a host structure for the output values of a SELECT statement.
  23. */
  24. struct {
  25.   VARCHAR   emp_name[UNAME_LEN];
  26.   float     salary;
  27.   float     commission;
  28. } emprec;
  29. /*
  30. Define an indicator struct to correspond to the host output struct. */
  31. struct
  32. {
  33.   short     emp_name_ind;
  34.   short     sal_ind;
  35.   short     comm_ind;
  36. } emprec_ind;
  37. /*  Input host variable. */
  38. int         emp_number;
  39. int         total_queried;
  40. /* Include the SQL Communications Area.
  41.   You can use #include or EXEC SQL INCLUDE. */
  42. #include <sqlca.h>
  43. /* Declare error handling function. */
  44. void sql_error();
  45. main()
  46. {
  47.   char temp_char[32];
  48. /* Connect to ORACLE--
  49. * Copy the username into the VARCHAR.
  50. */
  51.   strncpy((char *) username.arr, "SCOTT", UNAME_LEN);
  52. /* Set the length component of the VARCHAR. */
  53.   username.len = strlen((char *) username.arr);
  54. /* Copy the password. */
  55.   strncpy((char *) password.arr, "TIGER", PWD_LEN);
  56.   password.len = strlen((char *) password.arr);
  57. /* Register sql_error() as the error handler. */
  58.   EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");
  59. /* Connect to ORACLE.  Program will call sql_error()
  60. * if an error occurs when connecting to the default database.
  61. */
  62.   EXEC SQL CONNECT :username IDENTIFIED BY :password;
  63.   printf("\nConnected to ORACLE as user: %s\n", username.arr);
  64. /* Loop, selecting individual employee's results */
  65.   total_queried = 0;
  66.   for (;;)
  67.   {
  68. /* Break out of the inner loop when a
  69. * 1403 ("No data found") condition occurs.
  70. */
  71.        EXEC SQL WHENEVER NOT FOUND DO break;
  72.        for (;;)
  73.        {
  74.            emp_number = 0;
  75.            printf("\nEnter employee number (0 to quit): ");
  76.            gets(temp_char);
  77.            emp_number = atoi(temp_char);
  78.            if (emp_number == 0)
  79.                break;
  80.            EXEC SQL SELECT ename, sal, NVL(comm, 0)
  81.                INTO :emprec INDICATOR :emprec_ind
  82.                FROM EMP
  83.                WHERE EMPNO = :emp_number;
  84. /* Print data. */
  85.            printf("\n\nEmployee\tSalary\t\tCommission\n");
  86.            printf("--------\t------\t\t----------\n");
  87. /* Null-terminate the output string data. */
  88.            emprec.emp_name.arr[emprec.emp_name.len] = '\0';
  89.            printf("%-8s\t%6.2f\t\t",
  90.                emprec.emp_name.arr, emprec.salary);
  91.            if (emprec_ind.comm_ind == -1)
  92.                printf("NULL\n");
  93.            else
  94.                printf("%6.2f\n", emprec.commission);
  95.            total_queried++;
  96.        }  /* end inner for (;;) */
  97.        if (emp_number == 0) break;
  98.        printf("\nNot a valid employee number - try again.\n");
  99.   } /* end outer for(;;) */
  100.   printf("\n\nTotal rows returned was %d.\n", total_queried);
  101.   printf("\nG'day.\n\n\n");
  102. /* Disconnect from ORACLE. */
  103.   EXEC SQL COMMIT WORK RELEASE;
  104.   exit(0);
  105. }
  106. void sql_error(msg)
  107. char *msg;
  108. {
  109.   char err_msg[128];
  110.   int buf_len, msg_len;
  111.   EXEC SQL WHENEVER SQLERROR CONTINUE;
  112.   printf("\n%s\n", msg);
  113.   buf_len = sizeof (err_msg);
  114.   sqlglm(err_msg, &buf_len, &msg_len);
  115.   printf("%.*s\n", msg_len, err_msg);
  116.   EXEC SQL ROLLBACK RELEASE;
  117.   exit(1);
  118. }
 

'Computer_IT > C++' 카테고리의 다른 글

[VC] 인라인 ASM 으로 작성한 연산  (1) 2006.08.14
[VC] MMX support 여부  (0) 2006.08.14
Example Program: A Simple Query  (0) 2006.08.07
Const Member변수 초기화 특성  (0) 2006.04.24
LinkedList 자료  (0) 2006.04.06
VC++ 단축키 모음  (2) 2006.03.19
posted by 고급코드 고급코드
TAG C, Database, oracle
Computer_IT/C++ 2006.04.24 11:20
  1. #include <iostream>
  2. using namespace std;
  3. class Student
  4. {
  5. const int id;
  6. int age;
  7. char name[20];
  8. public :
  9. Student(int _id, int _age, char *_name) : id(_id)
  10. {
  11. age = _age;
  12. strcpy(name,_name);
  13. }
  14. void Show()
  15. {
  16. cout << " " << id << endl;
  17. cout << " " << age << endl;
  18. cout << " " << name << endl;
  19. }
  20. };
  21. int main()
  22. {
  23. Student st(2002, 20,"good");
  24. st.Show();
  25. return 0;
  26. }
 

'Computer_IT > C++' 카테고리의 다른 글

[VC] MMX support 여부  (0) 2006.08.14
Example Program: A Simple Query  (0) 2006.08.07
Const Member변수 초기화 특성  (0) 2006.04.24
LinkedList 자료  (0) 2006.04.06
VC++ 단축키 모음  (2) 2006.03.19
Console - 바둑소스  (0) 2006.02.22
posted by 고급코드 고급코드
Computer_IT/C++ 2006.04.06 20:18
[CODE type="c"]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILE_NAME "d:\\student.dat"
FILE * fpStd;
typedef struct node NODE;
struct node {
NODE * flink;
NODE * blink;
char id[12];
char name[30];
};
typedef struct anchor ANCHOR;
struct anchor {
NODE * flink;
NODE * blink;
};
ANCHOR anc;
NODE * makeNode(char * id, char * name);
NODE * makeEmptyNode();
void printData(void);
char showMenu();
void enqAft(NODE * newNode, NODE * oldNode);
void enqBef(NODE * newNode, NODE * oldNode);
NODE * findNode(char * id);
void delNode(NODE * node);
int getListSize(void);
void writeFile(void);
void readFile();
void clearList(void);
int main(void) {
 // 1. anchor가 자신의 주소를 가르키게 함
anc.flink = (NODE *) &anc;
anc.blink = (NODE *) &anc;
 char choice;
char input[80];
NODE * newNode;
NODE * tempNode;
char id[12];
char name[30];
 choice = showMenu();
 while (choice != '0') {
  if (choice == '1') {
 
  printf("학생의 정보를 입력하세요 (아이디 이름) : ");
  gets(input); // aaa 홍길동
  sscanf(input, "%s %s", id, name);
  newNode = makeNode(id, name);
   tempNode = findNode(id);
  if (tempNode == NULL) {
   enqBef(newNode, (NODE *)&anc);
  } else {
   printf("%s 아이디는 존재합니다. \n", id);
  }
  } else if (choice == '2') {
   printf("찾으려는 학생의 아이디를 입력하세요 : ");
  gets(input); // aaa 홍길동
  sscanf(input, "%s", id);
   newNode = findNode(id);
   if (newNode == NULL) {
   printf("%s 아이디는 존재하지 않습니다. \n", id);
  } else {
   printf("학생의 정보를 입력하세요 (이름) : ");
   gets(input); // aaa 홍길동
   sscanf(input, "%s", newNode->name);    
  }

 } else if (choice == '3') {
  printf("찾으려는 학생의 아이디를 입력하세요 : ");
  gets(input); // aaa 홍길동
  sscanf(input, "%s", id);
   newNode = findNode(id);
   if (newNode == NULL) {
   printf("%s 아이디는 존재하지 않습니다. \n", id);
  } else {
   delNode(newNode);
  }
  } else if (choice == '4') {
   printf("찾으려는 학생의 아이디를 입력하세요 : ");
  gets(input); // aaa 홍길동
  sscanf(input, "%s", id);
   newNode = findNode(id);
   if (newNode == NULL) {
   printf("%s 아이디는 존재하지 않습니다. \n", id);
  } else {
   printf("찾을 학생 %s의 정보 : %s, %s\n", id, newNode->id, newNode->name);
  }

 } else if (choice == '5') {
   printData();
  } else if (choice == '6') {
   printf("총 학생의 수 : %d명 입니다.\n", getListSize());
  } else if (choice == '7') {
   writeFile();
  } else if (choice == '8') {
   readFile();
  } else if (choice == '9') {
   clearList();
  } else {
 }
 
 printf("\n<계속 진행하려면 엔터를 치세요 >\n");
 gets(input);
 
 system("cls");
 choice = showMenu();  
}
 return 0;
}
NODE * makeNode(char *id, char *name) {
NODE * newNode = (NODE *) malloc(sizeof(NODE));
strcpy(newNode->id, id);
strcpy(newNode->name, name);
return newNode;
}
NODE * makeEmptyNode() {
NODE * newNode = (NODE *) malloc(sizeof(NODE));
return newNode;
}
void enqAft(NODE * newNode, NODE * oldNode) {
newNode->flink = oldNode->flink;
newNode->blink = oldNode;
 oldNode->flink->blink = newNode;
oldNode->flink = newNode;
}
void enqBef(NODE * newNode, NODE * oldNode) {
newNode->flink = oldNode;
newNode->blink = oldNode->blink;
 oldNode->blink->flink = newNode;
oldNode->blink = newNode;
}
NODE * findNode(char * id) {
NODE * curNode = anc.flink;
NODE * findNode = NULL;
 while(curNode != (NODE *) &anc) {
 if (strcmp(curNode->id, id) == 0) {
  findNode = curNode;
 }
 curNode = curNode->flink;
}
 return findNode;
}
void delNode(NODE * node) {
 node->blink->flink = node->flink;
node->flink->blink = node->blink;
 free(node);
}
int getListSize() {
NODE * curNode = anc.flink;
int count = 0;
 while(curNode != (NODE *) &anc) {
 count++;
 curNode = curNode->flink;
}
 return count;
}

void printData(void) {
NODE * curNode = anc.flink;
 while(curNode != (NODE *) &anc) {
 printf("학생의 아이디 : %s, 이름 : %s.\n", curNode->id, curNode->name);
 curNode = curNode->flink;
}
}
void clearList() {
NODE * curNode = anc.flink;
NODE * tempNode = NULL;
 while(curNode != (NODE *) &anc) {
 tempNode = curNode->flink;
 delNode(curNode);
 curNode = tempNode;
}
}

void readFile() {
fpStd = fopen(FILE_NAME, "r");
 if (fpStd == NULL) {
 printf("파일 열기에 실패함.\n");
} else {
  clearList();
  NODE * newNode = makeEmptyNode();
 while (fread(newNode, sizeof(NODE), 1, fpStd) > 0) {
  enqBef(newNode, (NODE *) &anc);
  newNode = makeEmptyNode();
 }
  fclose(fpStd);
}
}
void writeFile() {
fpStd = fopen(FILE_NAME, "w");
 if (fpStd == NULL) {
 printf("파일 열기에 실패함.\n");
} else {
  NODE * curNode = anc.flink;
  while(curNode != (NODE *) &anc) {
  fwrite(curNode, sizeof(NODE), 1, fpStd);
  curNode = curNode->flink;
 }
  fclose(fpStd);
}
}
char showMenu() {
char choice, dummy;
 printf("************************************\n");
printf("* 1. 학생 추가                      \n");
printf("* 2. 학생 수정                      \n");
printf("* 3. 학생 삭제                      \n");
printf("* 4. 학생 찾기                      \n");
printf("* --------------------------------- \n");
printf("* 5. 학생 목록                      \n");
printf("* 6. 학생 수 출력                   \n");
printf("* --------------------------------- \n");
printf("* 7. 파일 저장                      \n");
printf("* 8. 파일 읽기                      \n");
printf("* --------------------------------- \n");
printf("* 9. 모두 지우기                    \n");
printf("* --------------------------------- \n");
printf("* 0. 종료                           \n");
printf("************************************\n");
printf(">> ");
 scanf("%c%c", &choice, &dummy);
 return choice;
}

[/HTML][/CODE]

'Computer_IT > C++' 카테고리의 다른 글

Example Program: A Simple Query  (0) 2006.08.07
Const Member변수 초기화 특성  (0) 2006.04.24
LinkedList 자료  (0) 2006.04.06
VC++ 단축키 모음  (2) 2006.03.19
Console - 바둑소스  (0) 2006.02.22
Console Codepage 설정.  (0) 2006.02.15
posted by 고급코드 고급코드
TAG C, Linked list
Computer_IT/C++ 2006.03.19 22:18

Visual C++ 단축키 모음

일반 Editor 에서…
Ctrl + Space : 인텔리센스 출력
Ctrl + F5 : 빌드 후 프로그램 실행
F5 : Debugging 모드로 작동
F9 : Break Point
Ctrl + F2 : 북마크
F2 : 북마크로 이동
F10 : Debugging 모드로 작동하되 엔트리 포인트부터 시작
Ctrl + F10 : Debugging 모드로 작동하되 커서의 위치까지
Alt + F8 : 들여쓰기 정리
Ctrl + Shite + Space : 현재 가르키고 있는 함수의 매개변수 보기
Alt + B -> E : Clean
Alt + B -> R : Rebuild All
Ctrl + E : 현재 괄호랑 맞는 괄호를 찾아준다.
Alt + F7 : Project Setting
Ctrl + H : 바꿈
Ctrl + F : 찾기
Alt + E -> I : 여러파일에서 찾기
Ctrl + W : 클래스 위자드 (MFC 코딩시에만 사용)
Alt + 2 : output 윈도우
Alt + 0 : Workspace 윈도우

Debug 모드 작동중
F10 : Step Over (다음줄로)
F11 : Step Into (함수 안으로 들어감)
F5 : 다음 BreakPoint 까지 작동
Alt + 7 : Call Stack 윈도우
Alt + 3 : Watch 윈도우
Shift + F11 : 현재 루틴에서 빠져나온다.
Shift + F5 : 강제로 디버깅 모드 종료

===================================================================================

Ctrl + Tab Edit하고 있는 Child Window 간의 이동
Ctrl + F4 현재 Edit하고 있는 Child Window를 닫기
Ctrl + I >> 문자열 입력 점진적으로 문자열 찾기 (Incremental Search)
Ctrl + F3 현재 커서에 있는 문자열 찾기 (블록 지정 안 해도 됨)
F3 찾은 문자열에 대한 다음 문자열로 이동 (Next Search)
Ctrl + H 문자열 찾아 바꾸기 (Replace)
Ctrl + Left/Right Arrow 단어 단위로 이동
Ctrl + Delete 또는 Backspace 단어 단위로 삭제
Ctrl + F2 현재 라인에 북마크 지정/해제
F2 지정된 다음 북마크로 이동
Ctrl + Shift + F2 지정된 모든 북마크를 해제
F9 현재 라인에 Breakpoint를 지정/해제
Ctrl + Shift + F9 현재 Edit하고 있는 소스파일에 지정된 모든 Breakpoint 해제
Ctrl + ] 또는 E {괄호의 짝을 찾아줌 ({에 커서를 놓고 눌러야 함}
Ctrl + J, K #ifdef 와 #endif의 짝을 찾아줌
Ctrl + L 한 라인을 클립보드로 잘라내기 (Cut)
Ctrl + Shift + L 한 라인을 삭제
Alt + Mouse로 블록 설정 세로로 블록 설정하기 (마우스로)
Ctrl + Shift + F8 세로로 블록 설정하기 (키보드로), 취소할 때는 Esc키를 눌러야 함
블록 설정 >> Tab 선택된 블록의 문자열을 일괄적으로 들여쓰기(Tab) 적용
블록 설정 >> Shift + Tab 선택된 블록의 문자열을 일괄적으로 내어쓰기 적용
Alt + F8 >> Tab 또는 Shift + Tab 들여쓰기 자동 조정 (Tab:들여쓰기, Shift + Tab : 내어쓰기)
Ctrl + T 현재 커서에 있는 변수/함수에 대한 Type이 Tooltip 힌트 창에 나타남
Ctrl + Alt + T 멤버 변수/함수 목록에 대한 팝업 창이 나타남
Ctrl + Shift + T 공백/콤마/파이프/괄호 등을 기준으로 좌우 문자열을 Swap시킴
Ctrl + Shift + 8 문단기호 표시/감추기 : Tab은 ^, Space는 .으로 표시
Ctrl + D 툴바의 찾기 Editbox로 이동
Ctrl + Up/Down Arrow 커서는 고정시키고 화면만 스크롤 시키기

'Computer_IT > C++' 카테고리의 다른 글

Const Member변수 초기화 특성  (0) 2006.04.24
LinkedList 자료  (0) 2006.04.06
VC++ 단축키 모음  (2) 2006.03.19
Console - 바둑소스  (0) 2006.02.22
Console Codepage 설정.  (0) 2006.02.15
[펌] Visual C++ Console - 사격게임  (0) 2006.02.15
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.22 13:53
Console로 프로그래밍된 바둑 소스이다.

출처는 불분명... 어디더라??
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #define LEFT '4'
  6. #define RIGHT '6'
  7. #define UP  '8'
  8. #define DOWN '2'
  9. #define ENTER '5'
  10. #define CLEAR 0
  11. #define NONE 0
  12. #define MAPSIZE 19
  13. #define PLAYER1 1
  14. #define PLAYER2 2
  15. #define PLAY 1
  16. #define START 1
  17. #define END 0
  18. #define NO 0
  19. #define OK 1
  20. #define YES 1
  21. #define OKTOTALCOUNT 4
  22. #define FLAGTRUE 1
  23. #define FLAGFALSE 0
  24. void gotoxy(int x, int y);
  25. int xy[MAPSIZE][MAPSIZE];
  26. int map[MAPSIZE][MAPSIZE];
  27. int x, y, x2 = 2;
  28. int centerX=MAPSIZE/2, centerY=MAPSIZE/2;
  29. int displayX=0, displayLineY=21, displayY=22;
  30. char mapChar[]="┌┬┐├┼┤└┴┘";
  31. void clearValue() {
  32. int x,y;
  33. for(y=0;y<MAPSIZE;y++) {
  34. for(x=0;x<MAPSIZE;x++) {
  35.   map[y][x]=CLEAR;
  36. }
  37. }
  38. }
  39. int IsKill(int cnt) {
  40. return cnt==OKTOTALCOUNT;
  41. }
  42. int TestFlag(int x,int y) {
  43. if(x<0 x>=MAPSIZE y<0 y>=MAPSIZE) return FLAGTRUE;
  44. if(map[y][x]==OK) return FLAGTRUE;
  45. return FLAGFALSE;
  46. }
  47. int SefeDeleteTest(int x,int y,int OtherPlayer) {
  48. int result;
  49. int cnt;
  50. if(x<0 x>=MAPSIZE y<0 y>=MAPSIZE) return OK;
  51. if(xy[y][x]==OtherPlayer) return OK;
  52. if(xy[y][x]==NONE) return NO;
  53. cnt=0;
  54. result=NO;
  55. map[y][x]=OK;
  56. if(TestFlag(x,y-1)==FLAGFALSE) {
  57. if(SefeDeleteTest(x,y-1,OtherPlayer)) {
  58.   cnt=cnt + 1;
  59. }
  60. } else {
  61. cnt=cnt+1;
  62. }
  63. if(TestFlag(x-1,y)==FLAGFALSE) {
  64. if(SefeDeleteTest(x-1,y,OtherPlayer)) {
  65.   cnt=cnt + 1;
  66. }
  67. } else {
  68. cnt=cnt+1;
  69. }
  70. if(TestFlag(x+1,y)==FLAGFALSE) {
  71. if(SefeDeleteTest(x+1,y,OtherPlayer)) {
  72.   cnt=cnt + 1;
  73. }
  74. } else {
  75. cnt=cnt+1;
  76. }
  77. if(TestFlag(x,y+1)==FLAGFALSE) {
  78. if(SefeDeleteTest(x,y+1,OtherPlayer)) {
  79.   cnt=cnt + 1;
  80. }
  81. } else {
  82. cnt=cnt+1;
  83. }
  84. if(IsKill(cnt)){
  85. result=OK;
  86. }
  87. return result;
  88. }
  89. void DolDelete(int x,int y,int OtherPlayer) {
  90. if(x<0 x>=MAPSIZE y<0 y>=MAPSIZE) return;
  91. if(xy[y][x]==OtherPlayer) return;
  92. if(xy[y][x]==NONE) return;
  93. xy[y][x]=CLEAR;
  94. if(x+1<MAPSIZE) DolDelete(x+1,y,OtherPlayer);
  95. if(x-1>=0)      DolDelete(x-1,y,OtherPlayer);
  96. if(y+1<MAPSIZE) DolDelete(x,y+1,OtherPlayer);
  97. if(y-1>=0)      DolDelete(x,y-1,OtherPlayer);
  98. }
  99. void RalDeleteTest(int x,int y,int OtherPlayer) {
  100. clearValue();
  101. if(SefeDeleteTest(x+1,y,OtherPlayer)==YES)
  102. DolDelete(x+1,y,OtherPlayer);
  103. clearValue();
  104. if(SefeDeleteTest(x-1,y,OtherPlayer)==YES)
  105. DolDelete(x-1,y,OtherPlayer);
  106. clearValue();
  107. if(SefeDeleteTest(x,y+1,OtherPlayer)==YES)
  108. DolDelete(x,y+1,OtherPlayer);
  109. clearValue();
  110. if(SefeDeleteTest(x,y-1,OtherPlayer)==YES)
  111. DolDelete(x,y-1,OtherPlayer);
  112. }
  113. void input(int Player) {
  114. char c;
  115.   int LOOP=START;
  116. int OtherPlayer;
  117. if(Player == PLAYER1) {
  118. OtherPlayer = PLAYER2;
  119. } else {
  120. OtherPlayer = PLAYER1;
  121. }
  122.   while(LOOP!=END){
  123. c = getch();
  124. switch(c)
  125. {
  126. case RIGHT:
  127.   x=x+1;
  128.   if(x >= MAPSIZE) x=x-1;
  129.   gotoxy(x,y);
  130.   break;
  131. case LEFT:
  132.   x=x-1;
  133.   if(x < 0 ) x=x+1;
  134.   gotoxy(x,y);
  135.   break;
  136. case UP:
  137.   y=y-1;
  138.   if(y < 0 ) y=y+1;
  139.   gotoxy(x,y);
  140.   break;
  141. case DOWN: 
  142.   y=y+1;
  143.   if(y >= MAPSIZE ) y=y-1;
  144.   gotoxy(x,y);
  145.   break;
  146. case ENTER:
  147.   if(xy[y][x] != NONE ) break;
  148.   xy[y][x]=Player;
  149.   RalDeleteTest(x,y,Player);
  150.   clearValue();
  151.   if(SefeDeleteTest(x,y,OtherPlayer)==YES){
  152.    xy[y][x]=CLEAR;
  153.   } else {
  154.    LOOP = END;
  155.   }
  156. }
  157. }
  158. }
  159. void printScreen(){
  160. system("cls");
  161. int x,y,n;
  162. char c[3];
  163. for(y=0;y<MAPSIZE;y++) {
  164. for(x=0;x<MAPSIZE;x++) {
  165.            if(xy[y][x] == PLAYER1) {
  166.    printf("○");
  167.   } else if(xy[y][x] == PLAYER2 ) {
  168.    printf("●");
  169.   } else if(xy[y][x] == NONE ) {
  170.    n=(x+16)/17+(y+16)/17*3;
  171.    c[0]=mapChar[n*2];
  172.    c[1]=mapChar[n*2+1];
  173.    c[2]=0;
  174.    if((x-3)%6==0 && (y-3)%6==0) {
  175.     strcpy(c,"×");
  176.    }       
  177.    printf("%s",c);
  178.   }
  179. }
  180. printf("\n");
  181. }
  182. gotoxy(displayX,displayLineY);
  183. printf("UP:8  DOWN:2  LEFT:4  RIGHT:6  ENTER:5")
  184. }
  185. int gamePlayCheck(int Player)
  186. {
  187. //승패를 가른다.
  188. return 1;
  189. }
  190. void InitMapData() {
  191. int x,y;
  192. for(y=0;y<MAPSIZE;y++) {
  193. for(x=0;x<MAPSIZE;x++) {
  194.   xy[y][x]=CLEAR;
  195. }
  196. }
  197. }
  198. // 커서를 나타냅니다.
  199. void SetCursorShow(void)
  200. {
  201. HANDLE hConsole;
  202. hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  203. CONSOLE_CURSOR_INFO ci;
  204. GetConsoleCursorInfo( hConsole, &ci );
  205. ci.dwSize=100;
  206. ci.bVisible = TRUE;
  207. SetConsoleCursorInfo( hConsole , &ci );
  208. }
  209. void main() {
  210. int Player=PLAYER1,GamePlayFlag=PLAY;
  211. InitMapData();
  212. SetCursorShow();
  213. clearValue();
  214. printScreen();
  215. x=centerX;
  216. y=centerY;
  217. while(GamePlayFlag!=END){
  218. gotoxy(displayX,displayY);
  219. printf("%d 님이 두실 차례입니다.",Player);
  220. gotoxy(x,y);
  221. input(Player);
  222. printScreen();
  223. if(Player==PLAYER1) {
  224.   Player=PLAYER2;
  225. } else {
  226.   Player=PLAYER1;
  227. }
  228. GamePlayFlag = gamePlayCheck(Player);
  229. }
  230. gotoxy(displayX,displayY);
  231.   printf("%d님의 승리",Player);
  232. }
  233. void gotoxy(int x , int y)
  234. {
  235. COORD Pos = { x*2 , y};
  236. SetConsoleCursorPosition(GetStdHandle( STD_OUTPUT_HANDLE), Pos);
  237. }
 

'Computer_IT > C++' 카테고리의 다른 글

LinkedList 자료  (0) 2006.04.06
VC++ 단축키 모음  (2) 2006.03.19
Console - 바둑소스  (0) 2006.02.22
Console Codepage 설정.  (0) 2006.02.15
[펌] Visual C++ Console - 사격게임  (0) 2006.02.15
Visual C++ Console 에서 TurboC clrscr 구현  (0) 2006.02.15
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.15 00:14
[CODE type="c"]

BOOL SetConsoleCP(
    UINT wCodePageID  // code page to set
);

[/HTML][/CODE]

'Computer_IT > C++' 카테고리의 다른 글

VC++ 단축키 모음  (2) 2006.03.19
Console - 바둑소스  (0) 2006.02.22
Console Codepage 설정.  (0) 2006.02.15
[펌] Visual C++ Console - 사격게임  (0) 2006.02.15
Visual C++ Console 에서 TurboC clrscr 구현  (0) 2006.02.15
Visual C++ Console에서 TurboC gotoxy구현  (0) 2006.02.15
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.15 00:13
출처... 잊어먹었음.
  1. #include < stdio.h >
  2. #include < time.h >
  3. #include < conio.h >
  4. #include < stdlib.h >
  5. #include < windows.h >
  6. /*
  7. * < 사격게임 >
  8. *
  9. * 호환성
  10. * 이 프로그램은 Borland C++ 5.5 에서 컴파일하고 시험되었습니다.
  11. *
  12. * 게임설명
  13. * 사격장은 각각 하나씩의 화살을 포함하고 있는 아홉개의 레인으로 만들어져 있습니다.
  14. * 프로그램이 시작되면 레인의 오른쪽에 한개의 타겟(X)이 나타납니다.
  15. * 당신의 과제는 화살들 중의 하나로 타겟을 맞추는 것 입니다.
  16. * 화살을 쏘려면 레인 번호를 누르면 됩니다.
  17. * 25개의 타겟이 나타난 후에, 게임은 끝나고, 최종점수가 출력됩니다.
  18. *
  19. * 난이도 변경하기
  20. * 난이도를 변경하려면 ShootArrow(int)함수의 두번째 for루프를 변경해서 화살의 속도를 변경하면 됩니다.
  21. * 화살이 천천히 나갈수록 맞추기까지의 시간을 소비하므로 난이도는 높아집니다.
  22. * PlayGame(void)함수의 TIME_LIMIT값을 2초로 맞추어 놓았기 때문에
  23. * 화살이 발사되는데 2초가 걸린다면 게임이 안되죠. 역시 제한시간도 마음대로 수정하세요.
  24. */
  25. #define true 1
  26. #define false 0
  27. typedef int bool;
  28. void ShowScore(int);
  29. int PlayGame(void);
  30. void EraseTarget(int);
  31. void ShootArrow(int);
  32. int ShowTarget(void);
  33. void DrawScreen(void);
  34. void gotoxy(int x, int y);
  35. void clrscr(void);
  36. int main(void) {
  37.   int score;
  38.   srand((unsigned) time(NULL));
  39.   DrawScreen();
  40.   score = PlayGame();
  41.   ShowScore(score);
  42.   return 0;
  43. }
  44. void DrawScreen(void) {
  45.   int x;
  46.   clrscr();
  47.   gotoxy(20, 11);
  48.   printf("게임을 시작하려면 아무키나 누르세요.");
  49.   getch();
  50.   clrscr();
  51.   for (x = 1; x <= 10; x++) {    // 루프는 한번에 한 개의 헤인벽과 한개의 화살을 그린다.
  52.        gotoxy(1, x * 2 + 2);
  53.        printf("-----------------------------------");
  54.        if (x < 10) {
  55.            gotoxy(1, x * 2 + 3);
  56.            printf("%d%s", x, " >>-->");
  57.        }
  58.   }
  59. }
  60. void EraseTarget(int target_position) {
  61.   gotoxy(60, target_position * 2 + 3);
  62.   printf(" ");
  63. }
  64. int PlayGame(void) {
  65.   int score = 0;
  66.   int target_position;
  67.   long start_time;
  68.   bool shot_fired;
  69.   int num;       // 값으로 저장하는 숫자키
  70.   const int TIME_LIMIT = 2// 한 타겟당 제한시간 2초
  71.   int x;
  72.   for (x = 1; x <= 20; x++) {      // 이 루프는 25개의 타겟을 부여한다.
  73.        target_position = ShowTarget();
  74.        start_time = time(NULL);    // 여기에서 시작시간이 저장된다.
  75.        shot_fired = false;
  76.        
  77.        // 제한시간과 남은 화살개수를 알려줌
  78.        gotoxy(44, 2);
  79.        printf("%s%d%s", "남은 화살: ", 21 - x, " ");
  80.        gotoxy(10, 2);
  81.        printf("%s%d%s", "한 타겟 당 시간제한 ", TIME_LIMIT, "초");
  82.        
  83.        do {        // 선수가 사격을 할 때까지 키 입력을 기다린다.
  84.            num = getch() - '0';
  85.            if (num >= 1 && num <= 9) {
  86.                ShootArrow(num);
  87.                shot_fired = true;
  88.            }
  89.        } while (!shot_fired)
  90.        
  91.        // 시간 안에(2초) 타겟을 맞추었을 때 실행된다.
  92.        if ((time(NULL) < start_time + TIME_LIMIT) && num == target_position) {
  93.            putchar('\a');
  94.            ++score;
  95.        }
  96.        EraseTarget(target_position);
  97.   }
  98.   return score;
  99. }
  100. void ShootArrow(int a) {  // 파라미터 a는 발사한 화살의 번호
  101.   int x;
  102.   long delay;
  103.   for (x = 4; x <= 60; x++) {
  104.        gotoxy(x, a * 2 + 3);   // 루프의 매 회마다 화살을 1문자씩 오른쪽으로 움직인다.
  105.        printf(">>-->");
  106.        for (delay = 0; delay < 3999999; delay++) // 이 코드로 화살의 속도조절을 한다. 시스템의 성능에 따라 다르다.
  107.            continue;
  108.        gotoxy(x, a * 2 + 3);
  109.        printf("   ");
  110.   }
  111.   gotoxy(4, a * 2 + 3);
  112.   printf(">>-->");
  113. }
  114. void ShowScore(int score) {
  115.   gotoxy(60, 20);
  116.   printf("-----------------");
  117.   gotoxy(60, 21);
  118.   printf("%s%d", " Your score is ", score);
  119.   gotoxy(60, 22);
  120.   printf("-----------------");
  121. }
  122. int ShowTarget(void) {
  123.   int p = rand() % 9 + 1;      // 이 난수는 타겟이 나타날 레인번호이다. 1 ~ 9
  124.   gotoxy(60, p * 2 + 3);
  125.   printf("X");
  126.   return p;
  127. }
  128. void gotoxy(int x, int y)
  129. {
  130. COORD pos={x,y};
  131. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
  132. }
  133. void clrscr(void)
  134. {
  135. COORD Cur= {0,0 };
  136. unsigned long dwLen;
  137. FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE) , ' ', 80*25, Cur, &dwLen);
  138. }
 

'Computer_IT > C++' 카테고리의 다른 글

Console - 바둑소스  (0) 2006.02.22
Console Codepage 설정.  (0) 2006.02.15
[펌] Visual C++ Console - 사격게임  (0) 2006.02.15
Visual C++ Console 에서 TurboC clrscr 구현  (0) 2006.02.15
Visual C++ Console에서 TurboC gotoxy구현  (0) 2006.02.15
Compiler ...  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.15 00:11
[CODE type="c"]
void clrscr(void)
{
  COORD Cur= {0,0 };
  unsigned long dwLen;
  FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE) , ' ', 80*25, Cur, &dwLen);
}
[/HTML][/CODE]

화면 모두 지우기

'Computer_IT > C++' 카테고리의 다른 글

Console Codepage 설정.  (0) 2006.02.15
[펌] Visual C++ Console - 사격게임  (0) 2006.02.15
Visual C++ Console 에서 TurboC clrscr 구현  (0) 2006.02.15
Visual C++ Console에서 TurboC gotoxy구현  (0) 2006.02.15
Compiler ...  (0) 2006.02.14
확장열(Escape Sequence) 표기  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.15 00:09

[CODE type="c"]

void gotoxy(int x, int y)

{
  COORD pos={x,y};

  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

[/HTML][/CODE]

'Computer_IT > C++' 카테고리의 다른 글

[펌] Visual C++ Console - 사격게임  (0) 2006.02.15
Visual C++ Console 에서 TurboC clrscr 구현  (0) 2006.02.15
Visual C++ Console에서 TurboC gotoxy구현  (0) 2006.02.15
Compiler ...  (0) 2006.02.14
확장열(Escape Sequence) 표기  (0) 2006.02.14
Console Windows창 Title 바꾸기  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.14 23:56

[CODE] #pragma comment(lib, "mylib.lib") #pragma comment(lib, "winmm.lib") [/CODE]

컴파일시 lib파일 포함...

'Computer_IT > C++' 카테고리의 다른 글

Visual C++ Console 에서 TurboC clrscr 구현  (0) 2006.02.15
Visual C++ Console에서 TurboC gotoxy구현  (0) 2006.02.15
Compiler ...  (0) 2006.02.14
확장열(Escape Sequence) 표기  (0) 2006.02.14
Console Windows창 Title 바꾸기  (0) 2006.02.14
Console 환경 전용 API 함수  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.14 23:53

[CODE type="c"]
\a    0x07   벨 소리

\b    0x08   백 스페이스

\t     0x09   탭

\n    0x0a  개행

\x##  0x##  16진 코드

\###  0###   8진 코드

\\   0x5c  백슬레쉬

\'     0x27  홑따옴표

\"     0x22  겹따옴표

\?     0x3f  물음표

[/HTML][/CODE]

'Computer_IT > C++' 카테고리의 다른 글

Visual C++ Console에서 TurboC gotoxy구현  (0) 2006.02.15
Compiler ...  (0) 2006.02.14
확장열(Escape Sequence) 표기  (0) 2006.02.14
Console Windows창 Title 바꾸기  (0) 2006.02.14
Console 환경 전용 API 함수  (0) 2006.02.14
#define, #ifdef, #endif  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.14 22:59

[CODE type="c"]

#include < windows.h >

void main()
{
  SetConsoleTitle("ConsoleProgram"); // Console창의 Title 명을 바꾼다.
}
[/HTML][/CODE]

'Computer_IT > C++' 카테고리의 다른 글

Compiler ...  (0) 2006.02.14
확장열(Escape Sequence) 표기  (0) 2006.02.14
Console Windows창 Title 바꾸기  (0) 2006.02.14
Console 환경 전용 API 함수  (0) 2006.02.14
#define, #ifdef, #endif  (0) 2006.02.14
VC++ Error, Warning 목록  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.14 22:51
[CODE type="c"]
AllocConsole
CreateConsoleScreenBuffer
FillConsoleOutputAttribute
FillConsoleOutputCharacter
FlushConsoleInputBuffer
FreeConsole
GenerateConsoleCtrlEvent
GetConsoleCP
GetConsoleCursorInfo
GetConsoleMode
GetConsoleOutputCP
GetConsoleScreenBufferInfo
GetConsoleTitle
GetLargestConsoleWindowSize
GetNumberOfConsoleInputEvents
GetNumberOfConsoleMouseButtons
GetStdHandle
HandlerRoutine
PeekConsoleInput
ReadConsole
ReadConsoleInput
ReadConsoleOutput
ReadConsoleOutputAttribute
ReadConsoleOutputCharacter
ScrollConsoleScreenBuffer
SetConsoleActiveScreenBuffer
SetConsoleCP
SetConsoleCtrlHandler
SetConsoleCursorInfo
SetConsoleCursorPosition
SetConsoleMode
SetConsoleOutputCP
SetConsoleScreenBufferSize
SetConsoleTextAttribute
SetConsoleTitle
SetConsoleWindowInfo
SetStdHandle
WriteConsole
WriteConsoleInput
WriteConsoleOutput
WriteConsoleOutputAttribute
WriteConsoleOutputCharacter

[/HTML][/CODE]

'Computer_IT > C++' 카테고리의 다른 글

확장열(Escape Sequence) 표기  (0) 2006.02.14
Console Windows창 Title 바꾸기  (0) 2006.02.14
Console 환경 전용 API 함수  (0) 2006.02.14
#define, #ifdef, #endif  (0) 2006.02.14
VC++ Error, Warning 목록  (0) 2006.02.14
Pointer(포인터)를 이용해 문자열 길이 반환  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.14 22:47

[CODE type="c"]
main()
{
  #define TEST 100

  #ifdef TEST
       printf("TEST is defined.\n");
  #endif

  #ifdef SIZE
       printf("SIZE is defined.\n");
  #endif

  #ifndef TEST
       printf("TEST is not defined.\n");
  #endif

  #ifndef SIZE
       printf("SIZE is not defined.\n");
  #endif

  #undef TEST

  #define SIZE /* 값이 없게 정의되었으나 이도 엄연히 정의된 것이다 */

  #ifdef TEST
       printf("TEST is defined.\n");
  #endif
 
  #ifdef SIZE
       printf("SIZE is defined.\n");
  #endif

  #ifndef TEST
       printf("TEST is not defined.\n");
  #endif

  #ifndef SIZE
       printf("SIZE is not defined.\n");
  #endif
}

[/HTML][/CODE]

'Computer_IT > C++' 카테고리의 다른 글

확장열(Escape Sequence) 표기  (0) 2006.02.14
Console Windows창 Title 바꾸기  (0) 2006.02.14
Console 환경 전용 API 함수  (0) 2006.02.14
#define, #ifdef, #endif  (0) 2006.02.14
VC++ Error, Warning 목록  (0) 2006.02.14
Pointer(포인터)를 이용해 문자열 길이 반환  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.14 22:45
Error



★ #operator not followed by macro argument name
매크로 함수의 정의에서 #연산자는 매개변수를 문자열화 하는데,
#연산자 뒤에 매개변수 이외의 것이 오면 발생한다.

★ #define printing(msg) printf("Message is " #mssg "\n");
위의 매크로 함수 printmsg의 인자인 msg를 오른쪽 식에서는 mssg로
잘못 사용했다. 이럴 경우 발생하는 에러인데, 이 에러는 매크로를
정의한 곳에서 발생하는 것이 아니라 이 매크로 함수를 사용한 곳에서
발생한다.

★ 'XXXXXXXX' not an argument
형식 매개변수가 함수의 매개변수 리스트에 없을 때 발생한다.

★ Argument # missing name
함수의 원형에서 #번째 매개변수 명을 빠뜨렸다.

★ Argument list syntax error
함수의 매개변수 리스트가 문법적으로 틀렸다.

★ Array bounds missing ]
배열을 정의하거나 선언할 때 ]를 빠뜨렸다.

★ Array size too large
배열의 크기가 65536바이트를 넘었다.
배열은 한 세크먼트 크기인 65536바이트를 넘을 수 없는데 실제로는
그 크기에 더 제한을 받는다.

★ Assembler statement statement too long
인라인 어셈블리 코드를 삽입하기 위한 asm문은 480자를 넘을 수 없다.

★ Bad configuration file
TURBO.CFG파일에 명령행 컴파일러(TCC.EXE)의 옵션으로 옳지 못한 문자가
들어있다. 각 옵션들이 -(데쉬)로 시작하지 않아서 발생할 경우가 많다.

★ Bad file name format in include directive
include에서 사용하는 파일에 " 나 < 또는 > 를 빠뜨렸다.

★ Bad ifdef directive syntax
#ifdef문의 뒤에는 매크로명이 아닌 다른 수치 상수나 수식등이 오면 이 에러가
발생한다. #ifdef문의 뒤에는 항상 매크로명이 와야 한다.

★ Bad ifndef directive syntax
#ifndef문의 뒤에는 매크로명이 아닌 다른 수치 상수나 수식등이 오면 이 에러가
발생한다. #ifndef문의 뒤에는 항상 매크로명이 와야 한다.

★ Bit field size syntax
#ifdef문이나 #ifndef문의 뒤에는 매크로명이 아닌 다른 수치 상수나 수식등이
오면 이 에러가 발생한다. #ifdef문이나 #ifndef문의 뒤에는 항상
매크로명이 와야 한다.

★ Cannot modify a const object
const로 선언된 값을 변경시키려 했다.

★ Case outside of switch
case문을 Switch문의 밖에서 사용했다.

★ Case statement missing :
case문에서 :를 빠뜨렸다.

★ Cast syntax error
cast에 잘못된 기호가 있다.

★ Character constant too long
문자 상수는 1바이트 또는 2바이트 크기의 데이터만을 가질 수 있는데, 그 크기를
넘어 섰다. 확장열 사용시 열슬래쉬(\)가 빠져 있는지 살표본다.
예) char ch;
...
ch = '/xff'; /* 역슬래쉬를 슬래쉬로 잘못 사용. 에러가 발생한다. */

★ Compound statement missing
여는 괄호와 닫는 괄호의 갯수가 같지 않다.

★ Conflicting type modifiers
한 포인터에 대해 near와 far의 키워드를 한꺼번에 선언하는 경우와 한 함수에서
함수의 변경자(cdecl, pascal, interrupt등)를 한꺼번에 사용할 경우 발생한다.

★ Constant expression required
상수 수식만을 사용해야 되는 곳에 변수나 수식 등이 들어가 있다.

★ Could not find file 'XXXXXXXX.XXX'
명령행에서 지정한 파일이 없다.

★ Declaration missing ;
struct문이나 union문에서 세미콜론(;)을 빠뜨렸다.

★ Declaration needs type or storage class
선언은 적어도 한개의 형이나 기억분류를 지정해 주어야 한다.

★ Declaration syntax error
선언에서 불필요한 기호가 들어가거나 필요한 기호가 빠졌다.

★ Default outside of switch
default문을 switch문의 밖에서 만났다.

★ Define directive needs an identifier
#define문의 뒤에는 항상 매크로 명이 와야한다. 매크로 명도
일종의 명칭(identifier)이므로 "의 문자는 사용할 수 없다.

★ Division by zero
소스 파일에 있는 수식에서 0으로 나누는 식이 있다.

★ Do statement must have while
do문은 while과 함께 쓰여야만 한다.

★ Do-while statement missing (
do-while문에서 ( 를 빠뜨렸다.

★ Do-while statement missing )
do-while문에서 ) 를 빠뜨렸다.

★ Do-while statement missing ;
do-while문에서 ;를 빠뜨렸다.

★ Duplicate case
switch문안의 case문에 같은 값을 갖는 case문을 두번이상 사용했다.

★ Enum syntax error
enum형 데이터의 선언이 올바르지 못하다. 기억부류 지정자, 키워드,
enum, 열거택, 열거 리스트, 변수명등의 나열 순서가 올바른지, 열거 멤버의
수치 지정이 제대로 되어 있는지 살펴본다.

★ Error directive:XXX
컴파일 도중에 #error 컴파일러 지시어를 만났다.

★ Error writing output file
디스크가 꽉 찼거나 기타 다른 이유로 목적 파일이나 실행 파일을 생성할 수
없을때 발생한다.

★ Expression syntax
컴파일러가 수식을 분석하다가 문제점을 발견하면 이 에러를 발생시킨다.
보통 다른 에러를 같이 동반한다. 연산자를 두 개 이상 연달아 사용하거나,
괄호의 짝이 맞지 않다던가, 세미콜론을 빠뜨렸다던가 등등에서 발생한다.

★ Extra parameter in call
함수를 호출할 때 함수의 선언에 표기된 것 보다도 많은 매개변수를
사용했다 (함수 포인터)

★ Extra parameter in call to XXXXXXXX
함수를 호출할 때 함수의 선언에 표기된 것보다도 많은 매개변수를 사용했다.

★ File name too long
#include문에서 지정한 파일명이 너무 길다.

★ For statement missing (
For문에서 ( 를 빠뜨렸다.

★ For statement missing )
For문에서 ) 를 빠뜨렸다.

★ For statement missing ;
For문에서 ; 를 빠뜨렸다.

★ Function call missing )
함수의 호출에서 매개변수에 사용한 괄호의 갯수가 틀리거나 닫는 괄호를
빠뜨렸다.

★ Function definition out of place
함수의 정의는 다른 함수의 내부에 있을 수 없다.

★ Goto statement missing label
Goto문에서 레이블을 생략했다.

★ If statement missing (
If문에서 ( 를 빠뜨렸다.

★ If statement missing )
If문에서 ) 를 빠뜨렸다.

★ Illegal character 'C'(0xXXX)
컴파일 도중 잘못된 문자를 만났다.

★ Illegal initialization
변수의 초기화가 틀렸다. 변수의 초기화는 상수식이거나, extern 또는
static으로 선언한 변수의 주소를 사용할 수 있다.

★ Illegal octal digit
8진수에서 8진법에 맞지 않는 수(8이나 9)를 사용했다.

★ Illegal pointer subtraction
포인터가 아닌데서 포인터를 뺐다.

★ Illegal structure operation
구조체는 . 연산자, & 연산자, sizeof 연산자, = 연산자를 사용하거나 또는
구조체를 함수로 건네 주거나 되돌려받는 일만 할 수 있다.
구조체끼리 == 연사자를 사용하거나, = 연산자 양변의 구조체가 서로 다른
데이터 형을 가질 때도 발생한다.

★ Illegal use of floating point
부동 소수점을 사용하는 수는 비트연산자나 shift연산자, indirection(*)을
사용할 수 없다.

★ Illegal use of pointer
포인터는 더하기, 빼기, 지정, 비교, Indirection(*), ->에만 사용할 수 있다.
이 외에 다른 연산을 할 때 발생하는 에러이다.

★ Improper use of a typedef symbol
typedef로 정의한 형명을 수식 내에서 단독으로 사용하였다. typedef로 정의한
형명은 캐스트 연산자나 아니면 변수의 선언에만 사용할 수 있다.

★ In-line assembly not allowed
소스 파일에 In-line 어셈블리가 들어있다. 이 때는 터보 C 명령행 버전인
tcc.exe를 이용해 컴파일 해야 한다.

★ Incompatible type conversion
서로 형변환을 할 수 없는 것끼리 형변환을 하려 했다. 함수와 함수가 아닌것간의
변환과 구조체나 배열과 스칼라 형간의 변환 부동 소수점과 포인터간의 변환은
할 수 없다.

★ Incorrect command line argument:XXXXXXXX
명령행 컴파일러 사용시 인자가 옳지 못하다.

★ Inclrrect configuration file argument:XXXXXXXX
명령행 컴파일러의 configuration파일인 turboc.cfg에 옳지 못한 내용이 들어
있다. 각 옵션의 앞에 -가 붙어 있어야 한다.

★ Incorrect number format
16진수에서 소수점을 만났다.

★ Incorrect use of default
default문 뒤에 콜론(;)이 빠졌다.

★ Initializer syntax error
초기화를 하는 식에 연산자가 빠져 있거나 필요없는 연산자를 사용했거나 괄호의
잘못 사용에서 발생한다.

★ Invalid indirection
void형 포인터에 indirection(*)을 사용했다.

★ Invalid macro argument separator
#define문으로 매크로 함수를 정의할 때는 매크로 함수의 매개변수들은
쉼표(,)로 구분되어져야 한다.

★ Invalid pointer addition
두 포인터를 더하려 했다.

★ Invalid use of arrow
화살표 연산자(->)를 잘못 사용했다.

★ Invalid use of dot
점 연산자(.)를 잘못 사용했다.

★ Lvalue required
좌변값을 필요로 하는 곳에 좌변값이 아닌 다른 값이 놓여져 있다.
보통 = 연산자의 좌측에 오는 값이 대입할 수 없는 수식이나 상수식이 왔을 경우
발생한다. 또한 번지 연산자(&)를 좌변값이 아닌 식에 사용하였을 경우에도
발생한다.

★ Macro argument syntax error
#define문으로 매크로 함수를 만들 때 매개변수가 있어야 할 자리에 엉뚱한
문자가 있으면 발생한다.

★ Mismatched number of parameters in definition
함수의 정의에 있는 매개변수와 함수의 원형(prototype)에 있는 매개변수의
내용이나 갯수가 다르다.

★ Misplaced break
switch문이나 다른 루프(for, while, do-while등)의 바깥에서 break문을 사용했다.

★ Misplaced continue
switch문이나 다른 루프(for, while, do-while등)의 바깥에서 continue문을 사용했다.

★ Misplaced decimal point
소수점에 사용하는 점(.)을 잘못 사용했다.

★ Misplaced else
if문 없이 else문을 사용했다. 불필요한 세미콜론이나 괄호의 사용에서도
발생할 수 있다.

★ Misplaced elif directive
컴파일러가 #if, #ifdef, #ifndef문과 짝짓지 못한 #elif문을 만났다.

★ Misplaced else directive
컴파일러가 #if, #ifdef, #ifndef, #elif문과 짝짓지 못한 #else문을 만났다.

★ Misplaced endif directive
컴파일러가 #if, #ifdef, #ifndef, #elif, #else문과 짝짓지 못한
#endif문을 만났다.

★ Must take address of memory location
레키스터 변수에는 주소 연산자(&)를 사용할 수 없다.

★ No file name ending
#Include문에 따옴표(")나 괄호(>)가 빠졌다.

★ No file names given
명령행 컴파일러에서 컴파일할 파일명을 지정하지 않았다.

★ Non-portable pointer assignment
포인터를 포인터 아닌 곳에 대입하려 했다. 에러 메시지를 막기 위해
case 연산자를 사용해야 한다.

★ Non-portable pointer comparison
포인터를 포인터 아닌 것과 비교하려 했다. 에러 메시지를 막기 위해
cast 연산자를 사용해야 한다.

★ Non-portable return type conversion
return문에 있는 식이 함수의 형과 다르다.

★ Not an allowed type
C에서 허용되지 않는 형의 데이터를 선언하였다.

★ Out of memory
컴파일을 하기에 메모리가 부족하다. 메모리를 많이 차지하는 램상주
프로그램이 있을 경우 이를 제거한다.
소스 파일이 너무 클 경우에는 소스 파일을 단순화 시키거나 소스 파일을
분할하여 분할 컴파일을 해야 한다.

★ Pointer required on left side of ->
->의 왼쪽 피연산자는 반드시 구조체나 공용체 포인터이어야 한다.

★ Redeclaration of 'XXXXXXXX'
이미 선언되어 있는 identifier를 선언하려 했다.

★ Size of structure or array not known
배열을 정의할 때 생략할 수 없는 배열 크기를 생략 했거나, 배열의 크기를
빠뜨린채로 외부 배열을 선언하고 sizeof의 피연산자로 사용했거나,
그 외부 배열을 사용하면 발생한다.

★ Statement missing ;
식이나 문장의 끝에 세미콜론이 빠져있다.

★ Structure or union syntax error
구조체나 공용체 선언이 문법에 어긋났다.

★ Structure size too large
구조체의 크기가 너무 커서 사용가능한 메모리에 그 구조체를 생성할 수 없다.

★ Subscripting missing ]
배열 첨자 지정에 ]를 빠뜨렸다.

★ Switch statement missing (
Switch문에서 ( 를 빠뜨렸다.

★ Switch statement missing )
Switch문에서 ) 를 빠뜨렸다.

★ Too few parameters in call
함수의 호출에 매개변수가 모자란다.

★ Too few parameters in call to 'XXXXXXXX'
함수의 호출에 매개변수가 모자란다.

★ Too many cases
switch문안에서 case문을 너무 많이 사용했다. 한 switch문에서
257개 까지의 case문을 사용할 수 있다.

★ Too many decimal points
부동 소수점 상수에 한 개 이상의 점(.)이 사용되었다.

★ Too many decimal cases
Switch문안에 한 개 이상의 case문이 사용되었다.

★ Too many exponents
부동 소수점 상수에 한 개 이상의 지수가 있다.

★ Too many initializers
초기화가 허용되는 범위보다 맣은 초기화를 했다. 주로 다음과 같은
경우에 이 에러가 발생한다.
(예) int num[3] = {1, 2, 3, 4} /* 세개의 데이터를 가질 수 있는 배열에
네개의 초기화 값을 대입했다 */

★ Too many storage classes in declaration
한 선언에서 여러개의 기억부류를 지정했다.

★ Too many types in declaration
한 선언에서 여러개의 형(type)을 지정했다.

★ Too much auto memory in function
한 함수에서 자동변수를 너무 많이 선언했다.

★ Too much code defined in file
현재 소스 파일에 있는 총 함수의 크기가 64K바이트를 넘어섰다.
소스 파일을 간단히 고치거나 소스를 분할하여 컴파일한다.

★ Too much global data defined in file
선언한 전역 변수의 크기가 64K바이트를 넘었다.
너무 큰 배열등을 없애거나 경우에 따라 프로그램을 재구성해야 한다.

★ Two consecutive dots
C에서는 (..)은 사용되지 않는다.

★ Type mismatch in parameter #
함수의 원형과 그 함수를 사용하는 곳에서의 매개변수의 형이 다르다.
(함수포인터)

★ Type mismatch in parameter # in call to 'XXXXXXXX'
함수의 원형과 그 함수를 사용하는 곳에서의 매개변수의 형이 다르다.
(실제함수)

★ Type mismatch in parameter 'XXXXXXXX'
함수의 원형과 그 함수를 사용하는 곳에서의 매개변수의 형이 다르다.
(함수포인터)

★ Type mismatch in parameter 'XXXXXXXX' in call to 'YYYYYYYY'
함수의 원형과 그 함수를 사용하는 곳에서의 매개변수의 형이 다르다.
(실제함수)

★ Type mismatch in redeclaration of 'XXX'
변수가 원래 선언된 것과 다른 형으로 다시 그 변수를 선언하였다.

★ Unable to create output file 'XXXXXXXX.XXX'
출력파일(보통 .obj파일)을 생성하지 못한다. 디스크가 꽉 찼거나
쓰기 방지(write protect)가 되어있거나 등등에서 발생한다.

★ Unable to create turboc.$ln
tcc.exe가 링크를 하기 위해 tlink.exe를 호출하기 직전에 생성하는
임시 파일인 turboc.$ln을 만들지 못한다. 바로 위와 같은 경우에
발생할 수 있다.

★ Unable to execute command 'XXXXXXXX'
터보 링커(tlink.exe)나 터보 어셈블러(tasm.exe)를 찾지 못한다.

★ Unable to open include file 'XXXXXXXX.XXX'
#include문제 지정한 헤더 파일을 읽을 수 없다.

★ Unable to open input file 'XXXXXXXX.XXX'
컴파일할 파일 'XXXXXXXX.XXX'를 읽어올 수 없다.

★ Undefined label 'XXXXXXXX'
goto문에 지정한 레이블을 함수 블럭내에서 찾을 수 없다.

★ Undefined structure 'XXXXXXXX'
정의 되지 않은 구조체 'XXXXXXXX'를 사용하였다.

★ Unexpected end of file in comment stated on line #
주석문의 사용에서 */를 빠뜨렸을 경우에 발생한다.

★ Unexpected end of file in conditional stated on line #
#endif를 빠뜨렸을 경우에 발생한다.

★ Unknown preprocessor directive:'XXX'
전처리기 지시어로 틀린 명령이 들어가 있다.

★ Unterminated character constant
'의 갯수가 맞지 않는다.

★ Unterminated string
문자열이나 문자 상수에서 '또는 "를 빠뜨렸다.

★ User break
컴파일 도중에 Ctrl-Break키를 눌렀다.

★ While statement missing (
While문에서 ( 를 빠뜨렸다.

★ While statement missing )
While문에서 ) 를 빠뜨렸다.

★ Wrong number of arguments in call of 'XXXXXXXX'
매크로 함수 'XXXXXXXX'를 호출할 때 지정한 실 매개변수와 형식
매개변수의 갯수가 다르다.

Warning

★ 'XXXXXXXX' declared but never used
자동 변수를 선언해 놓았지만 한번도 사용하지 않았다. 이 메시지는 자동변수를
선언한 함수의 끝에서 발생한다.

★ 'XXXXXXXX' is assigned a value which is never used
자동 변수를 선언해 놓고 어떤 값을 대입시키기는 했지만 한번도 사용(참조)하지
않았다.

★ 'XXXXXXXX' not part of structure
구조체의 멤버 연산자인 . 이나 ->의 오른쪽 피 연산자가 구조체의 멤버가 아니다.

★ Ambiguous operators need parentheses
쉬프트 연산자. 비트 연산자, 관계 연산자가 괄호 없이 사용될 때 이 경고가
발생한다.

★ Both return and return of a value used
한 함수에서 여러번 return문이 있을 때 각각이 되돌리는 값의 형(type)이 서로
같지 않다.

★ Call to function with no prototype
함수의 선언이 없이 함수를 사용했다.

★ Call to function 'XXXX' with no prototype
함수 'XXXX'를 선언 없이 사용했다.

★ Code has no effect
아무런 효과가 없는 수식을 사용했다. 예를 들어 a+b;라는 수식은 에러를 발생
시키지는 않지만 아무일도 하지 않게 되고 이 경고를 발생시킨다.

★ Constant is long
32767보다 큰 10진 상수나 65535보다 큰 8진수 또는 16진수를 뒤에 1이나 L을
붙이지 않고 사용했다. 이 때 사용한 상수는 long형으로 처리된다.

★ Constant out of range in comparison
관계연산자의 양변을 비교할 때 양변의 값이 비교 가능한 범위를 벗어났다.
서로 다른형의 데이터를 비교할 때는 두 값이 같은 허용범위 안에 있어야 한다.
예를 들면, unsigned형과 int형의 데이터를 비교 하려면 둘다 0에서 32767사이의
값을 가지고 있어야 한다. 또, unsigned형과 -1이라는 값과의 비교는
무의미함으로 주의해야 한다.

★ conversion may lose significant digits
unsigned long형이나 long형의 데이터가 int형의 데이터로 변환될 때 이 경고가
발생한다. 변환 전의 값이 int형 범위 안에 속해 있으면 별문제가 없자만,
int형의 범위를 벗어나는 값은 데이터의 앞의 두 바이트가 없어져 버리므로
주의해야 한다.

★ Function should return a value
void형이 아닌 함수인데 되돌림 값을 되돌리지 않았다.

★ Hexadecimal or octal constant too large
문자상수나 문자열 상수내에서 사용한 16진 또는 8진 확장열의 값이
1바이트를 넘어섰을 때 발생한다.

★ Mixing pointers to signed and unsigned char
signed char와 unsigned char간의 변환이 일어날 때 발생한다. 이 경고는
실행에 어떤 해도 주지 않는다.

★ No declaration for function 'XXXXXXXX'
함수를 호출하기 전에 그 함수가 선언이나 정의가 미리 되어있지 않으면 발생한다.

★ Non-portable pointer assignment
캐스트 연산자의 사용을 하지 않고 포인터와 포인터가 아닌 것을 서로
대입 시키려 했다.

★ Non-portable pointer comparison
캐스트 연산자의 사용을 하지 않고 포인터와 포인터가 아닌 것을 서로 비교
하려 했다.

★ Non-portable pointer conversion
함수형이 포인터 형인데 포인터가 아닌 값을 되돌리려고 했거나 그 반대의 일을
시도 했다. 캐스트 연산자를 사용하면 이 경고를 막을 수 있다.

★ Parameter 'XXXXXXXX' is never used
함수의 매개변수를 함수내에서 한번도 사용하지 않았다.

★ Possible use of 'XXXXXXXX' before definition
자동변수를 초기화시키지 않은 채로 사용하였다.

★ Possibly incorrect assignment
if, while, do-while문의 조건식에서 대입 연산자를 사용하였다.
보통 ==를 =로 잘못 사용한데서 비롯되지만 대입 연산자를 사용하여야 할
경우에는 다음과 같이 한다.
(예) if(ch = getch()) ...

if((ch=getch()) != 0) ...

★ Redefinition of 'XXXXXXXX' is not identical
매크로 정의를 한 후에 또다시 재정의를 하는데 그 값이 이전에 정의한 값과
다르다. 다른 값으로 정의 해야할 필요가 있으면 #undef문을 사용하여 매크로
정의를 취소한 후에 다시 정의해야 한다.

★ Restarting compile using assembly
tcc를 이용하여 컴파일할 때 소스 파일내에 asm(인라인 어셈브리)이
사용되었으면 어셈블러로 다시 컴파일한다는 경고를 낸다.

★ Structure passed by value
구조체를 몽땅 함수로 넘겨 주었다. 프로그램의 실행에는 전혀 무해하지만,
보통 구조체의 데이터는 구조체 포인터를 사용하여 전달해 주는 것이
바람직하다.

★ Superfluous & with function or array
함수명은 그 자체가 함수를 가리키는 번지값을 가지고 있는데, 필요없는
번지연산자(&)를 함수명에 사용하였다.

★ Suspicious pointer conversion
다른 형을 가리키는 포인터끼리의 형변환이 일어났다. 변환이 정당할 경우에는
캐스트 연산자를 사용하여 이 경고를 없앨 수 있다.
그렇지 않을 경우에는 이 경고 메시지를 발생 시킨부분을 확실히 고쳐야 하며,
그대로 방치하거나 캐스트 연산자 남용의 경우에는 무지무지 심각한 버그를
유발할 수 있다.

★ Undefined structure 'XXXXXXXX'
정의되지 않은 구조체 택을 사용하였다.
보통 구조체 택의 철자 오류에서 나타난다.

★ Unknown assembler instuction
인라인 어셈블리에 허용되지 않는 어셈블리 코드가 들어가 있다.

★ Unreachable code
프로그램 중에 제어가 도달하디 낳는 부분이 있다. 즉 한번도 실행되지 않는
부분이 있다. break, continue나 goto문을 잘못 하용했거나,if나 while문
등에서 조건식이 무한루프가 되어 버렸거나 할 경우에 발생한다.

★ void functions may not return a value
void형 함수는 아무 값도 되돌릴 수 없는데 return문이 어떠한 값을
되돌리려 했다.

★ Zero length structure
크기가 0인 구조체를 정의해 놓았다.

'Computer_IT > C++' 카테고리의 다른 글

확장열(Escape Sequence) 표기  (0) 2006.02.14
Console Windows창 Title 바꾸기  (0) 2006.02.14
Console 환경 전용 API 함수  (0) 2006.02.14
#define, #ifdef, #endif  (0) 2006.02.14
VC++ Error, Warning 목록  (0) 2006.02.14
Pointer(포인터)를 이용해 문자열 길이 반환  (0) 2006.02.14
posted by 고급코드 고급코드
Computer_IT/C++ 2006.02.14 22:35


[CODE type="c"]
#include < stdio.h >

int length( char* pstr );

main()
{
  int len = length( "abcde" );

  printf( "길이 = %d ", len );    // 길이 = 5
}

int length( char* pstr )
{
  int len = 0;

  while( *pstr != NULL )
  {
       pstr++;    // pstr의 번지를 1만큼 증가
       len++;    // 문자열의 길이를 1만큼
  }

  return len;
}

[/HTML][/CODE]

'Computer_IT > C++' 카테고리의 다른 글

확장열(Escape Sequence) 표기  (0) 2006.02.14
Console Windows창 Title 바꾸기  (0) 2006.02.14
Console 환경 전용 API 함수  (0) 2006.02.14
#define, #ifdef, #endif  (0) 2006.02.14
VC++ Error, Warning 목록  (0) 2006.02.14
Pointer(포인터)를 이용해 문자열 길이 반환  (0) 2006.02.14
posted by 고급코드 고급코드