[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Code:
    char buff[256];
    FILE * f;
    
    GetCurrentDirectory(256, buff);
    strcat(buff, "\\file.txt");
    
    f = fopen(buff,"r");
    if (f)
    {
      while(fgets(buff,255,f))
      {
        printf("%s\n",buff);
      }
      fclose(f);
    }
    
     
  2. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    :D
     
  3. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    slesh, спс.
    И последний вопрс (гна єти два часа))))
    Хочу защитится от переполнения буффера.
    юзаю фгетс:
    Code:
    int main ()
    {
    	char buf[154];
    	fgets(buf,sizeof(buf),stdin);
    	if(strcmp(LowerCase(buf),"help") == 0)
    	{
    		printf("%s","OK");
    	}
      system("pause");
      return 0;
    }
    
    но из за этого строка не преобразовуеться в нижый регистер.
    как быть?
     
    #4143 -m0rgan-, 3 Nov 2009
    Last edited by a moderator: 3 Nov 2009
  4. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Что смешного?
    пограмма вылетала в файл dbghook.c указывая на строку _debugger_hook_dummy = 0;
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    я вот юзаю самописную функцию для перевода буфера в нижний регистр. Понимает ткоа англ буквы
    Code:
    void my_LowCase(char * buf)
    {
    	while (buf[0])
    	{
    		if (buf[0]>='A' && buf[0]<='Z') 
    		{
    			buf[0] += 32;
    			
    		}
    		buf++;
    	}
    
    	return;
    }
    
    

    2 -m0rgan- оформляй код в теги [ CODE ]
     
  6. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    2slesh я почти тоже:

    Code:
    char * LowerCase(const char * Command)                                         
    {                                                                            
    	int num = 0;                                                               
    	char* buffer = (char *)malloc(strlen(Command) + 1);                    
    	while (Command[num] != '\0')                                             
    	{                                                                  
    		buffer[num] = tolower(Command[num]);                               
    		num++;                                                   
    	}                                                                    
    	buffer[num] = '\0';                                              
    	return (buffer);                                                        
    }  
    
    Но суть не меняеться:
    Code:
    int main ()
    {
    	char buf[154];
    	gets(buf);
    	if(strcmp(LowerCase(buf),"help") == 0)
    	{
    		printf("%s","OK");
    	}
      system("pause");
      return 0;
    }
    
    пашет ок, а:
    Code:
    int main ()
    {
    char buf[154];
    fgets(buf,sizeof(buf),stdin);
    if(strcmp(LowerCase(buf),"help") == 0)
    {
    printf("%s","OK");
    }
    system("pause");
    return 0;
    }
    
    не приобразовует.
     
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ты не забывай что gets возврает строку и вконце неё идет еще \n
     
  8. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    я могу добавить \n

    Code:
    int main ()
    {
    	char buf[154];
    	fgets(buf,sizeof(buf),stdin);
    	strcat(buf,"\n");
    	if(strcmp(LowerCase(buf),"help") == 0)
    	{
    		printf("%s","OK");
    	}
      system("pause");
      return 0;
    }
    
    тот же результат.
     
  9. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    не там добавляеш. после help надо
     
  10. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    2slesh - спс!
     
  11. люля

    люля New Member

    Joined:
    6 Aug 2008
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Доброе утро всем))
    скажите пожалуйста, когда borland c++ 3.1 компилирует, он что использует 32 разрядный код??
    просто у меня работает среда, но у меня windows sp2, а у друга у него sp3 и ему пишет ошибку:
    16 разрядная подсистема ms-dos
    Процессор NTVDM обнаружил недопустимую инструкцию

    может ли это быть из за того что у него пак 3?
     
    #4151 люля, 4 Nov 2009
    Last edited: 4 Nov 2009
  12. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    хватит уже использовать древние компиляторы!
     
  13. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Скажи это преподавателям института/школы
     
    _________________________
  14. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    вообще старые достовские проги лучше запускай в DosBox. Потому что виндовый эмулятор доса очень сильно глючит. Она на разных компах с одной и тойже виндой может выдавать ошибку )
     
  15. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Добрый день, подскажите, как переводить строку в С++, интересует ВИН АПИ.

    char a[256] = "aaaa";
    strcat(a,"\n");
    ...
    DrawText(hdc,a,.........);


    В итоге выводит не
    ааа
    а

    а: ааа (ИЕРОГЛИФ) а

    как тогда перевести строку?
     
  16. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    а зачем ты делаеш strcat(a,"\n");?
     
  17. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    char a[256] = "aaaa";
    a[lstrlen(a)+1] = 0x0a;
    Не?Извращенство?)
     
  18. masterBlack

    masterBlack New Member

    Joined:
    12 Jun 2008
    Messages:
    18
    Likes Received:
    2
    Reputations:
    0
    Добрый день.
    Как с помощю GetStockObject разместить на форме однооконного приложения картинку ?

    Или вообще как картинку разместить?


    КОД:


    Code:
    #include <windows.h> 
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 
    { 
    static char szAppName[] = "HelloWin"; 
    HWND hwnd; 
    MSG msg; 
    WNDCLASSEX wndclass; 
    
    wndclass.cbSize = sizeof(wndclass); 
    wndclass.style = CS_HREDRAW | CS_VREDRAW; 
    wndclass.lpfnWndProc = WndProc; 
    wndclass.cbClsExtra = 0; 
    wndclass.cbWndExtra = 0; 
    wndclass.hInstance = hInstance; 
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH); 
    wndclass.lpszMenuName = NULL; 
    wndclass.lpszClassName = szAppName; 
    wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
    
    RegisterClassEx(&wndclass); 
    
    hwnd = CreateWindow( 
    szAppName, // window class name 
    "The Hello Program", // window caption 
    WS_OVERLAPPEDWINDOW, // window style 
    CW_USEDEFAULT, // initial x position 
    CW_USEDEFAULT, // initial y position 
    CW_USEDEFAULT, // initial x size 
    CW_USEDEFAULT, // initial y size 
    NULL, // parent window handle 
    NULL, // window menu handle 
    hInstance, // program instance handle 
    NULL 
    ); // creation parameters 
    
    ShowWindow(hwnd, iCmdShow); 
    UpdateWindow(hwnd); 
    
    while(GetMessage(&msg, NULL, 0, 0)) 
    { 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
    } 
    return msg.wParam; 
    } 
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) 
    { 
    HDC hdc; 
    PAINTSTRUCT ps; 
    RECT rect; 
    
    switch(iMsg) 
    { 
    case WM_PAINT: 
    hdc = BeginPaint(hwnd, &ps); 
    
    GetClientRect(hwnd, &rect); 
    
    DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); 
    
    EndPaint(hwnd, &ps); 
    return 0; 
    
    case WM_DESTROY: 
    PostQuitMessage(0); 
    return 0; 
    } 
    
    return DefWindowProc(hwnd, iMsg, wParam, lParam); 
    }
    
     
  19. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    BitBlt, StretchBlt, элемент управления Picture если задать ему через какое то из сообщений хэндл картинки для отображения.
     
  20. masterBlack

    masterBlack New Member

    Joined:
    12 Jun 2008
    Messages:
    18
    Likes Received:
    2
    Reputations:
    0
    а примерчик можно?
     
Thread Status:
Not open for further replies.