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

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Code:
    char* RoomGetText( int A, int B );
    Отсюда видно, что функция возвращает указатель на символ (char*).
    Значит нам нужно создать такой же указатель и присвоить ему тоже значение ячейки памяти, что вернет функция.
    Code:
    char* var1;
    var1 = RoomGetText(int A, int B);
    Теперь var1 указывает на место в памяти где хранится символ(или много символов).

    Почитай про указатели. Бессмысленно спрашивать в отдельной теме "Что возвращает функция?"
     
    1 person likes this.
  2. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Я читаю книгу по С++. Но приходится параллельно в исходниках разбираться. А они наполнены самыми разнообразными способами достижения одного и того же результата.
    Ага, ясно. Спасибо. А то начитаешься постов разных "кодеров". Которые кричат что std::string не тру, юзай char*...
     
  3. darckmilord

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

    Joined:
    8 Feb 2007
    Messages:
    50
    Likes Received:
    14
    Reputations:
    0
    Спасибо всем.

    дак читал я это, только по прочитанному выдавало эксепшен, а оказалось функцию на экспорт в Длл забыл прописать а обращаться к ней обращался вот и был эксепшен, а грешил на работу с char*
     
  4. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    Криво читаешь название топика (с) Ra$cal
     
  5. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    C++ & WinAPI
    Code:
    #include <iostream>
    #include <windows.h>
    #define BUF_SIZE 256
    
    using namespace std;
    
    int main(int argc, LPTSTR argv[])
    {
        HANDLE hIn, hOut;
        DWORD nIn, nOut;
        CHAR Buffer[BUF_SIZE];
        if(argc != 3)
        {
            cout << "Example using: \"FileWork file1 file2\"\n";
            return 1;
        }
        //Сдесь хендл не присваевается
        hIn = CreateFile(argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
        if(hIn == INVALID_HANDLE_VALUE)
        {
            cout << "Can't open input file!!! Error: " << GetLastError() << endl;
            return 2;
        }
        hOut = CreateFile(argv[2], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
        if(hOut == INVALID_HANDLE_VALUE)
        {
            cout << "Can't open output file!!! Error: " << GetLastError() << endl;
            return 3;
        }
        while(ReadFile(hIn, Buffer, BUF_SIZE, &nIn, NULL) && nIn > 0)
        {
            WriteFile(hOut, Buffer, BUF_SIZE, &nOut, NULL);
            if(nIn != nOut)
            {
                cout << "Unknow writing error!!!" << endl;
                return 4;
            }
        }
        CloseHandle(hIn);
        CloseHandle(hOut);
        return 0;
    }
    
    В консоле пишу так FileWorks C:\1.txt C:\2.txt!
    P.S Знаю о существовании функции CopyFile. Пытаюсь разобраться просто.
     
    #6085 Jakeroid, 14 Jan 2011
    Last edited: 14 Jan 2011
  6. Derec

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

    Joined:
    8 Nov 2007
    Messages:
    74
    Likes Received:
    4
    Reputations:
    0
    Ребят, как правильно перезагрузить оператор "+" для матриц?

    Вот класс:
    Code:
    class  Matrix {
    public:
    	unsigned int n;
    	unsigned int m;
    	double* A;
    	Matrix(unsigned int N, unsigned int M);
    	~Matrix();
            Matrix operator +( const Matrix *);
    };
    
    Matrix Matrix::operator + ( const Matrix *B)
    {
      //Здесь пока недописан код сложения матриц
    }
    Затем вытаюсь сложить:
    Code:
    Matrix* A = new Matrix(2,2)
    Matrix* B = new Matrix(2,2)
    Matrix* C = new Matrix(2,2);
    C = A+B;
    Ругается на сложение: Invalid pointer addition :(
     
  7. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    Matrix* Matrix::eek:perator + ( const Matrix *B)
    по крайней мере так
     
  8. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    для того чтобы в многопоточном коде организовать упорядоченный вывод в какой либо поток, единственным способом является создание конструкции типа
    Code:
    pthread_mutex_t out_mutex = PTHREAD_MUTEX_INITIALIZER
    void COUT(const char* msg)
    {
          pthread_mutex_lock(&out_mutex)
          cout << msg;
          pthread_mutex_unlock(&out_mutex)
    }
    
    и непосредственно использование только ее для вывода в cout ? Или же есть стандартный методы для этого, и не стоит изобретать велосипеды ?

    PS. хотя что ето я еретичу, вероятно все потоки ввода вывода и так потокобезопасные ?
     
    #6088 cupper, 18 Jan 2011
    Last edited: 18 Jan 2011
  9. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    [Linux C++]

    в какую сторону капать, искать по поводу отслеживание ввода склавиатуры. Тобишь пользователь чтото печатает нужно это чтото получить по мере ввода (каждую очередную нажатую кнопку)
     
  10. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Чем отличается структура SIZE от структуры POINT ?
     
  11. becensed

    becensed Member

    Joined:
    2 Dec 2009
    Messages:
    84
    Likes Received:
    24
    Reputations:
    1
    Ну вот сравни:
    POINT:
    Code:
    typedef struct tagPOINT {
       LONG x;
       LONG y;
    } POINT;
    SIZE:
    Code:
    typedef struct tagSIZE {
      LONG cx;
      LONG cy;
    } SIZE, *PSIZE;
    Вывод: принципиальной разницы как бы и нет.
     
  12. Dzhegan

    Dzhegan New Member

    Joined:
    15 Oct 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Как эмулировать нажатие Shift+Tab для некоторого окна?
     
  13. Awesome

    Awesome New Member

    Joined:
    18 Jan 2011
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    не компилируется код

    Code:
    BOOL GetURLPage(LPCWSTR pURLPage)
    {
    	HINTERNET hSession;   
    	HINTERNET hURL;
    	char cBuffer[1024];
    	BOOL bResult;
    	DWORD dwBytesRead;
    	hSession = InternetOpen(L"Microsoft Internet Explorer",
    		INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    	hURL = InternetOpenUrl(hSession, pURLPage,NULL, 0, 0, 0);  
    	bResult = InternetReadFile(hURL, (LPSTR)cBuffer,(DWORD)1024, &dwBytesRead);
    	InternetCloseHandle(hURL);
    	InternetCloseHandle(hSession);
    	return(TRUE);
    }
    При попытке запустить возникают ошибки:
    Что я делаю не так?
    (C++, визуал студия 2010)
     
  14. drim

    drim Member

    Joined:
    27 Aug 2009
    Messages:
    347
    Likes Received:
    33
    Reputations:
    4
    2Awesome
    Код правильный. Это ошибка линковщика. Он говорит тебе, что не может разрешить функцию, т.к. не находит их ни в одной подключённой библиотеке. Подключи в свойствах проекта библиотеку сетевых функций wininet.lib
     
  15. RexTiam

    RexTiam Member

    Joined:
    2 Nov 2009
    Messages:
    117
    Likes Received:
    45
    Reputations:
    5
    Code:
    #include <iostream.h>
    
    struct tochd  
    {
    	int inf;  
    	tochd *left; 
    	tochd *right; 
    }; 
    
    void newochd(tochd **sl, tochd **sr)  
    {
    	*sl=new tochd; 
    	*sr=new tochd; 
    	(*sl)->left = NULL; 
    	(*sl)->right = *sr; 
    	(*sr)->left = *sl; 
    	(*sr)->right = NULL; 	
    } 
    
    void delochd(tochd **sl, tochd **sr)  
    {
    	tochd *t;
    	while( (*sl)->right != (*sr) )
    	{
    		t=(*sl)->right->right;
    		delete (*sl)->right;
    		(*sl)->right=t;
    	}
    	delete *sl;  *sl = NULL;  
    	delete *sr;  *sr = NULL; 
    }
    
    void add_l(tochd *sp, int inf)  
    {
    	tochd *spt=new tochd; 
    	spt->inf = inf; 
        spt->left = sp->left; 
    	spt->right = sp; 
    	spt->left->right = spt; 
    	sp->left = spt;   
    } 
    
    void add_r(tochd *sp, int inf)   
    {
    	tochd *spt=new tochd; 
    	spt->inf = inf; 
        spt->left = sp; 
    	spt->right = sp->right; 
    	sp->right = spt; 
    	spt->right->left = spt;   
    } 
    
    void showochd(tochd *sl,tochd *sr)
    {
    	tochd *p=sl;
    	while( (p=p->right) != sr)
    	{
    		cout<<p->inf<<" ";
    	}
    	cout<<endl;
    }
    
    int read_del(tochd *sp)  
    {
    	int inf= sp->inf; 
    	sp->left->right = sp->right;        
    	sp->right->left = sp->left; 
    	delete sp;  
    	return inf; 
    } 
    
    void div2Ochd(tochd *sl, tochd *sr,tochd **slL, tochd **srL,tochd **slR, tochd **srR) 
    { 
    	newochd(slL,srL); 
    	newochd(slR,srR); 
        tochd *spt = sl->right; 
    	while(spt != sr)  
    	{
    		add_l(*srL, read_del(spt)); 
    		spt = sl->right; 
    		if (spt != sr)  
    		{ 
    			add_l(*srR, read_del(spt)); 
    			spt = sl->right; 
    		} 
    	} 
    	delete sl;  
    	delete sr; 
    } 
    
    
    void slip(tochd **sl, tochd **sr,tochd *slL, tochd *srL,tochd *slR, tochd *srR) 
    { 
    	newochd(sl,sr); 
    	tochd *sptL = slL->right; 
    	tochd *sptR = slR->right; 
    	while ((sptL != srL) && (sptR != srR))  
    	{ 
    	    if (sptL->inf < sptR->inf)  
    		{ 
    			add_l(*sr, read_del(sptL)); 
    			sptL = slL->right; 
    		} 
    		else 
    		{ 
    			add_l(*sr, read_del(sptR)); 
    			sptR = slR->right; 
    		} 
    	}
    	while (sptL != srL) 
    	{ 
    		add_l(*sr, read_del(sptL)); 
    		sptL = slL->right; 
    	} 
        delete slL; delete srL; 
     
    	while (sptR != srR) 
    	{ 
    		add_l(*sr, read_del(sptR)); 
    		sptR = slR->right; 
    	} 
        delete slR; delete srR; 
    } 
    
    void sort(tochd **sl, tochd **sr) 
    {
    	tochd *slL, *srL,*slR, *srR; 
        if ((*sl)->right->right == *sr) return;  
    	div2Ochd(*sl,*sr,&slL,&srL,&slR,&srR); 
    	sort(&slL,&srL); 
    	sort(&slR,&srR);       
        slip(sl,sr,slL,srL,slR,srR); 
    } 
    
    void poisk(tochd *sl,tochd *sr,int x)
    {
    	tochd *p=sl;
    	int n=0;
    	while( (p=p->right) != sr )
    	{
    		n++;
    		if (p->inf == x) break;
    	}
    	if (p->inf == x) cout<<"element naiden. pos="<<n<<endl;
    		else cout<<"takogo elementa net"<<endl;
    	
    }
    
    
    
    int main()
    {
    	int n,k,nvar=10;
    
    	cout<<"vvedi n: ";
    	cin>>n;
    
    	tochd *sl,*sr;
    	newochd(&sl,&sr);
    
    	for(int i=0;i<n;i++)
    	{
    		cin>>k;
    		add_r(sl,k);
    	}
    	cout<<"ochered:"<<endl;
    	showochd(sl,sr);
    	
    	cout<<"poisk "<<nvar<<endl;
    	poisk(sl,sr,nvar);
    
    
    	tochd *max,*min,*p;
    
    	p=max=min=sl->right;
    
    	while( (p=p->right) != sr )
    	{
    		if ( p->inf > max->inf ) max = p;
    		if ( p->inf < min->inf ) min = p;
    	}
    	
    	cout<<"min = "<<min->inf<<endl;
    	cout<<"max = "<<max->inf<<endl;
    
    	while (max->right != min && max->left != min && min != max)
    	{
    		p=max;
    		while( p->left != min && p != sl ) p=p->left;
    		if ( p != sl ) 
    		{
    			read_del(p);
    			continue;
    		}
    
    		p=max;	
    		while( p->right != min && p != sr ) p=p->right;
    		{
    			if ( p != sr ) read_del(p);
    			continue;
    		}
    		
    	}
    
    	showochd(sl,sr);
    
    	cout<<"sortirovka:"<<endl;
    	sort(&sl,&sr);
    	showochd(sl,sr);
    
    	delochd(&sl,&sr);
    	return 0;
    }
    Помогите в этом коде найти ошибку Т__т
     
  16. becensed

    becensed Member

    Joined:
    2 Dec 2009
    Messages:
    84
    Likes Received:
    24
    Reputations:
    1
    Какую ошибку? Скомпилировалось нормально. Сортирует, что-то ищет. КАКУЮ ОШИБКУ?
     
  17. Vollkorn

    Vollkorn Member

    Joined:
    6 Nov 2010
    Messages:
    86
    Likes Received:
    15
    Reputations:
    -6
    Есть api функция SendMessage. Прочитай про неё, и всё поймешь. Как клавиши отсылать и так далее.
     
  18. Grifon

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

    Joined:
    20 Mar 2008
    Messages:
    60
    Likes Received:
    2
    Reputations:
    0
    ребята вот такая проблема пишу простенькую программку на С вот исходный код
    #include <stdio.h>
    #define STOP *

    main()
    {
    char ch;
    ch=getchar();
    while(ch!=STOP)
    {
    putchar(ch);
    cg=getchar();
    }
    }

    но не компилируется она( помогите найти проблему
     
  19. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Code:
    #include <stdio.h>
    #define STOP '*'
    
    void main()
    {
    	char ch;
    	ch=getchar();
    
    	while( ch != STOP )
    	{
    		putchar(ch);
    		ch=getchar();
    	}
    
    	return;
    }
    
    Думаю, вы это хотели.
     
    1 person likes this.
  20. nexts

    nexts New Member

    Joined:
    23 Oct 2010
    Messages:
    9
    Likes Received:
    0
    Reputations:
    -1
    какой компилятор для c++ посоветуете?
    чтобы екзешник работал везде, ато где слышал что visual studio запускается только у тех, у кого установлен visual studio
     
Thread Status:
Not open for further replies.