[ 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. jawbreaker

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

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Зачем вам getch, одумайтесь, люди! Есть же cin.get() который делает то же самое!!!
    Code:
    #include <iostream>
    using namespace std;
    int main()   
    {   
        cout << "Hello\n";   
        cin.get();   
        return 0;   
    }
    И всё!
     
    1 person likes this.
  2. horlyk

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

    Joined:
    2 Dec 2007
    Messages:
    132
    Likes Received:
    6
    Reputations:
    0
    жжете)
    Code:
    #include <iostream>
    #include <windows.h>
    using namespace std;
    int main()   
    {   
        cout << "PreweDD\n";   
        system("PAUSE");   
        return 0;   
    }
     
  3. fire64

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

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    дайте кто-нибудь простой исходник на C++
    для перехвата консоли, обыскал весь инет, ничего не нашел
     
  4. D1mka

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

    Joined:
    2 Jan 2008
    Messages:
    123
    Likes Received:
    14
    Reputations:
    2
    а как в ВС2008 сделать что бы нумерация строк была?
     
  5. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Положение курсора показывается в статусбаре внизу, там можно узнать номер строки.
    А так чтобы прямо нумерация - не знаю, скорее всего нельзя.
     
  6. jawbreaker

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

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    [D1mka]
    Tools -> Options -> Text Editor -> C/C++ -> General -> на вкладке Display поставь галочку у Line Numbers.
     
    1 person likes this.
  7. ExZoD

    ExZoD Member

    Joined:
    4 Jun 2008
    Messages:
    23
    Likes Received:
    6
    Reputations:
    0
    плохо искал
    Code:
    #include "proc.h"
    
    CIORedirection::CIORedirection()
    {
        ZeroFields();
    	wait = 60000;
    }
    
    CIORedirection::~CIORedirection()
    {
        Close();
    }
    
    CIORedirection::CIORedirection(const CIORedirection&)
    {
    }
    
    void CIORedirection::operator = (const CIORedirection&)
    {
    }
    
    void CIORedirection::ZeroFields()
    {
        m_hNewStdIn = m_hNewStdOut = m_hReadStdOut = m_hWriteStdIn = NULL;
        ::ZeroMemory((void*)&m_processInfo, sizeof(PROCESS_INFORMATION));
        ::ZeroMemory((void*)&m_startupInfo, sizeof(STARTUPINFO));
        ::ZeroMemory((void*)&m_secAttributes, sizeof(SECURITY_ATTRIBUTES));
        ::ZeroMemory((void*)&m_secDescriptor, sizeof(SECURITY_DESCRIPTOR));
    }
    
    BOOL CIORedirection::IsWinNT()
    {
        OSVERSIONINFO osverinfo;
        osverinfo.dwOSVersionInfoSize = sizeof(osverinfo);
        ::GetVersionEx(&osverinfo);
        return (osverinfo.dwPlatformId == VER_PLATFORM_WIN32_NT);
    }
    
    void CIORedirection::InitSecurity()
    {
        if (IsWinNT())
        {
            ::InitializeSecurityDescriptor(&m_secDescriptor,
                                        SECURITY_DESCRIPTOR_REVISION);
            ::SetSecurityDescriptorDacl(&m_secDescriptor, TRUE, NULL, FALSE);
            m_secAttributes.lpSecurityDescriptor = &m_secDescriptor;
        }
        else m_secAttributes.lpSecurityDescriptor = NULL;
        m_secAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
        m_secAttributes.bInheritHandle = TRUE;
    }
    
    void CIORedirection::Create(const char *pAppName, char *pCmdLine, char *CurrentDirectory)
    {
        if (m_processInfo.hProcess)
    		return;
        InitSecurity();
        if (!::CreatePipe(&m_hNewStdIn, &m_hWriteStdIn, &m_secAttributes, 0))
    		return;
        if (!::CreatePipe(&m_hReadStdOut, &m_hNewStdOut, &m_secAttributes, 0))
        {
            CloseHandle(m_hNewStdIn);
            CloseHandle(m_hWriteStdIn);
    		return;
        }
        ::GetStartupInfo(&m_startupInfo);
        m_startupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
        m_startupInfo.wShowWindow = SW_HIDE;
        m_startupInfo.hStdOutput = m_hNewStdOut;
        m_startupInfo.hStdError = m_hNewStdOut;
        m_startupInfo.hStdInput = m_hNewStdIn;
        if (!::CreateProcess(pAppName, pCmdLine, NULL, NULL, TRUE,
            CREATE_NEW_CONSOLE, NULL, CurrentDirectory, &m_startupInfo, &m_processInfo))
        {
            Close();
    		return;
        }
    	WaitForSingleObject(m_processInfo.hProcess, wait);
    }
    
    DWORD CIORedirection::GetExitCode() const
    {
        DWORD dwExitCode = 0;
        GetExitCodeProcess(m_processInfo.hProcess, &dwExitCode);
        return dwExitCode;
    }
    
    void CIORedirection::Terminate()
    {
        DWORD dwExitCode = GetExitCode();
        TerminateProcess(m_processInfo.hProcess, dwExitCode);
    }
    
    void CIORedirection::Close()
    {
        if (GetExitCode() == STILL_ACTIVE) Terminate();
        if (m_processInfo.hProcess)
        {
            ::CloseHandle(m_processInfo.hThread);
            ::CloseHandle(m_processInfo.hProcess);
        }
        if (m_hNewStdIn) ::CloseHandle(m_hNewStdIn);
        if (m_hNewStdOut) ::CloseHandle(m_hNewStdOut);
        if (m_hReadStdOut) ::CloseHandle(m_hReadStdOut);
        if (m_hWriteStdIn) ::CloseHandle(m_hWriteStdIn);
        ZeroFields();
    }
    
    BOOL CIORedirection::Read(char *lpBuf,
                              DWORD dwBufSize,
                              DWORD *pBytesRead)
    {
        unsigned long avail;
        BOOL bRes = ::PeekNamedPipe(m_hReadStdOut,lpBuf,dwBufSize,pBytesRead,&avail,NULL);
        if (!bRes)
    		return FALSE;
        if (*pBytesRead != 0)
    	{
            bRes = ::ReadFile(m_hReadStdOut,lpBuf,dwBufSize,pBytesRead,NULL);
    	}
        return bRes;
    }
    
    BOOL CIORedirection::Write(const char *lpBuf,
                               DWORD dwBufSize,
                               DWORD *pBytesRead)
    {
    	WriteFile(m_hWriteStdIn, lpBuf, dwBufSize, pBytesRead, NULL);
    	Read((char *)lpBuf, dwBufSize, pBytesRead);
        return (::WriteFile(m_hWriteStdIn, "\n", dwBufSize, pBytesRead, NULL));
    }
    
    void CIORedirection::SetWait(int milliseconds)
    {
    	wait = milliseconds;
    }
    
    int FileExists(char *directory, char *filename)
    {
    	WIN32_FIND_DATAA dataFind;
    	HANDLE hFind;
    	hFind = FindFirstFileA(filename, &dataFind);
    	if(hFind == INVALID_HANDLE_VALUE)
    	{
    		char abs_path[MAX_PATH];
    		if(directory[strlen(directory)-1] == '\\')
    			sprintf(abs_path, "%s%s", directory, filename);
    		else
    			sprintf(abs_path, "%s\\%s", directory, filename);
    		hFind = FindFirstFileA(abs_path, &dataFind);
    		if(hFind == INVALID_HANDLE_VALUE)
    		{
    			if(strlen(filename) == 3 && filename[1] == ':')
    			{
    				DWORD uDrive = toupper(filename[0]) - 'A';
    				uDrive = 1 << uDrive;
    				if(GetLogicalDrives() & uDrive)
    					return 1;
    				else
    					return 0;
    			}
    			else
    				return 0;
    		}
    		FindClose(hFind);
    		return 2;
    	}
    	FindClose(hFind);
    	return 1;
    }
    
    CMD::CMD()
    {
    	GetCurrentDirectoryA(MAX_PATH, cur_dir);
    	sys_env = (char *)malloc(2000);
    	memset(sys_env, 0, 2000);
    	GetEnvironmentVariableA("Path", sys_env, 2000);
    	env_pos = strlen(sys_env);
    	sys_env[env_pos] = ';';
    	memcpy(sys_env+env_pos+1, cur_dir, strlen(cur_dir));
    	SetEnvironmentVariableA("Path", sys_env);
    }
    
    void CMD::SetWait(int milliseconds)
    {
    	console.SetWait(milliseconds);
    }
    
    void CMD::Exec(char *command, char *outbuf, int bufsize)
    {
    	if(!memcmp(command, "cd ", 3))
    	{
    		char buffer[MAX_PATH+3];
    		int offset = 0, len, res;
    		strcpy(buffer, command);
    		offset = 3;
    		if(buffer[offset] == '"')
    			offset++;
    		len = strlen(buffer)-1;
    		if(buffer[len] == '"')
    		{
    			buffer[len] = 0;
    			len--;
    		}
    		if(buffer[len] == '\\' && buffer[len-1] != ':')
    			buffer[len] = 0;
    		res = FileExists(cur_dir, &buffer[offset]);
    		if(!res)
    			goto m1;
    		if(res == 1)
    			strcpy(cur_dir, &buffer[offset]);
    		else if(res == 2)
    		{
    			strcat(cur_dir, "\\");
    			strcat(cur_dir, &buffer[offset]);
    		}
    		sys_env[env_pos+1] = 0;
    		strcat(sys_env, cur_dir);
    		SetEnvironmentVariableA("Path", sys_env);
    		goto m1;
    	}
    	char filename[MAX_PATH];
    	GetSystemDirectory(filename, MAX_PATH);
    	sprintf(filename, "%s\\cmd.exe /c %s", filename, command);
    	console.Create(0, filename, cur_dir);
    	console.Read(outbuf, bufsize, (DWORD *)&bufsize);
    	console.Close();
    	outbuf += bufsize;
    m1:
    	sprintf(outbuf, "%s>", cur_dir);
    }
    
    юзать примерно так:
    Code:
    		char buffer[10000];
    		memset(buffer, 0, sizeof(buffer);
    		cmd.Exec("dir", buffer, sizeof(buffer));
    
    в buffer будет результат выполнения команды. собсна вставляешь вместо "dir" путь к консольной проге и в путь
     
  8. fire64

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

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    а где proc.h достать ?
     
  9. Lee_fx

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

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Имеется символьный массив содержащий сточку "Иванов Иван Иванович"
    Пользователь вводит "Иван" и выполняется поиск этого слова в исходной фразе, и если слово там найдено об этом сообщается пользователю.

    Собственно как этот поиск реализовать? Может есть какая-нибудь функция для работы со строками подходящая под этот пример?
    Сделал на лабе все проверки в циклах - препод сказал мол сильно громоздко =(
     
  10. jawbreaker

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

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Для символов есть стандартный контейнер - string, надо написать #include <string>. Потом просто используешь стандартный метод find для поиска подстроки. Подробности смотри тут
     
  11. _antony

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

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    вот по быстрому набросал.
    Code:
    #include<stdio.h>
    #include<string.h>
    int main(int argc , char *argv[])
    { 
       char src[] = "Jack  Test Ivanov Mihail";
       char *pch;
       pch = strtok(src ," ");
       while(1)
       {
    	  pch = strtok( NULL , " " );
    	  if(pch == NULL)
    	  {
    		  break;
    	  }
    	  if( !strcmp(pch , "Test") )
    	  {
    		  printf("Found!\n");
    		  break;
    	  }
       }
       return 0;
    }
    
    
     
  12. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Почему он не правильно вычисляет t1 и t2?

    Code:
    # include <stdio.h>
    # include <math.h>
    int main() {
        float a;
        float b;
        float c;
        float d;
        float t;
        float t1;
        float t2;
        float x1;
        float x2;
        float x1t1;
        float x2t1;
        float x1t2;
        float x2t2;
        printf("Enter a, please: ");
        scanf("%f", &a);
        printf("Enter b, please: ");
        scanf("%f", &b);
        printf("Enter c, please: ");
        scanf("%f", &c);
        d=pow(b,2)+4*a*c;
        if (d<0) {
                 printf("D<0 => this equation has not radicals");
        } else if (d=0) {
                 t=-b/2*a;
                 if (t<0) {
                            printf("X^2 < 0 => this equation has not radicals");
                 } else {
                            x1=pow(t,0.5);
                            x2=-pow(t,0.5);
                            printf("X1 = %f", x1);
    		                printf("X2 = %f", x2);
                 }
        } else {
                 t1=(-b+pow(d,0.5))/2*a;
    	         t2=(-b-pow(d,0.5))/2*a;
    	         if (t1>=0 and t2>=0) {
                    x1t1=pow(t1,0.5);
    		        x2t1=-pow(t1,0.5);
    		        x1t2=pow(t2,0.5);
    		        x2t2=-pow(t2,0.5);
    		        printf("X1 = %f", x1t1);
    		        printf("X2 = %f", x2t1);
    		        printf("X3 = %f", x1t2);
    		        printf("X4 = %f", x2t2);
              } else if (t1>=0 and t2<0) {
                    x1t1=pow(t1,0.5);
    		        x2t1=-pow(t1,0.5);
    		        printf("X1 = %f", x1t1);
    		        printf("X2 = %f", x2t1);
              } else if (t1<0 and t2>=0) {
                    x1t2=pow(t2,0.5);
    		        x2t2=-pow(t2,0.5);
    		        printf("X1 = %f", x1t2);
    		        printf("X2 = %f", x2t2);
              } else if (t1<0 and t2<0)
                    printf("This equation has not radicals");
              }
    }
    
     
    #1672 VIP, 2 Oct 2008
    Last edited: 2 Oct 2008
  13. Larionich

    Larionich Member

    Joined:
    21 Sep 2008
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    Vip1.Инициализируй переменные так
    Code:
    float a,b,c,d,t,t1,t2,x1,x2,x1t1,x2t1,x1t2,x2t2;
    
    2.Надо условие задавать не так
    Code:
    else if (d=0)
    А так
    Code:
    else if (d==0)
    3.Пишешь and в сях. Забудь про него. Есть оператор && (and) и || (or) и ^ (xor), а оператора ^^ нет, это смайлик.
    Code:
    else if (t1>=0 and t2<0)
    Замени на
    Code:
    else if ((t1>=0) && (t2<0))
    4.Ты не поверишь, но вместо
    Code:
    printf("X1 = %f", x1); printf("X2 = %f", x2);
    Можно написать
    Code:
    printf("X1 = %fX2 = %f", x1, x2);
    5.И вообще, t=-b/(2*a) и t=-b/2*a это не одно и тоже. Когда ты пишешь t=-b/2*a это значит t=(-b/2)*a.
    Плюс не написал, что должна считать программа. Если это корни 4ст, метод Феррари тебе в руки.
     
  14. fire64

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

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    траблы с MessageBox

    не получается скомпилить


    PHP:

    #include <windows.h>

    int WINAPI WinMain(HINSTANCE hInstanceHINSTANCE hPrevInstanceLPSTR lpCmdLineint nCmdShow)
    {

    MessageBox(NULL"Hello, World!""Example"MB_OK);

        return 
    1;
    }
    в результате я получаю 2 ошибки

    error C2872: 'MessageBoxA' : ambiguous symbol
     
  15. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    http://en.allexperts.com/q/C-1040/message-box.htm

    http://www.makak.ru/2008/03/10/messagebox-%E2%80%94-kak-vyvesti-okoshko-s-soobshheniem-na-c/

    http://msdn.microsoft.com/en-us/library/aa381915(VS.85).aspx
     
    2 people like this.
  16. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    перенес тему сюда...
     
    #1676 De-visible, 3 Oct 2008
    Last edited: 3 Oct 2008
  17. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Можно как то узнать какие существуют корневые разделы реестра в системе(hkey_users,hkey_current_user и т.д.)?Или можно только методом тыка перебрать все возможные названия на предмет их существования в реестре?
     
  18. 4p3

    4p3 Elder - Старейшина

    Joined:
    18 Aug 2008
    Messages:
    142
    Likes Received:
    30
    Reputations:
    0
    Хм, ульи всегда стандартны.( Конечно же если ты имеешь в виду именно ульи. типо HKLM, HKCU,HKCC,HKCR, HKU)
     
  19. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Задача следующая: При вводе четырёхзначного числа, нужно выяснить есть ли там одинаковые цифры. В питоне я это сделал следующим образом: превратил вводимое число в список, а затем сравнил все элементы списка. А вот как разбить число по цифрам в С?
     
  20. FrMn

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

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    чото типа того
    Code:
    DWORD n=123456,i=0;
    char asd[100500];
    
    while (n!=0)
    {
    asd[i]=n%10;
    n/=10;
    i++;
    }
     
Thread Status:
Not open for further replies.