[ 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. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Мне не к спеху, код двухгодичной давности я не найду сейчас. Если вы не сталкивались с этим, ну и ладно тогда.
     
  2. cipa21

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

    Joined:
    9 Apr 2009
    Messages:
    548
    Likes Received:
    146
    Reputations:
    30
    Из главной функции передаю двухмерный массив на дальнейшую обработку, проблема заключается именно в возврате массива обратно в главную функцию, а точнее, он не передается. Как все правильно организовать?
     
  3. Ins3t

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

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    что то я вас вовсе не понял, но все же попытаюсь стать телепатом:

    Code:
    #include <vector>
    #include <iostream>
    
    void inc_matrix(std::vector<std::vector<int>> &matrix);
    void print_matrix(std::vector<std::vector<int>> &matrix);
    
    int main()
    {
    	std::vector<std::vector<int>> matrix(2); 
    	matrix.at(0).push_back(0);
    	matrix.at(0).push_back(1);
    	matrix.at(1).push_back(2);
    	matrix.at(1).push_back(3);
    
    
    	std::cout << "Before inc:\n";
    	print_matrix(matrix);
    
    	inc_matrix(matrix);
    
    	std::cout << "After inc:\n";
    	print_matrix(matrix);
    
    	return 0;
    }
    
    void inc_matrix(std::vector<std::vector<int>> &matrix)
    {
    	for(std::vector<std::vector<int>>::iterator i = matrix.begin(); i != matrix.end(); ++i)
    		for(std::vector<int>::iterator k = (*i).begin(); k != (*i).end(); ++k)
    			(*k)++;
    }
    
    void print_matrix(std::vector<std::vector<int>> &matrix)
    {
    	for(std::vector<std::vector<int>>::const_iterator i = matrix.begin(); i != matrix.end(); ++i)
    	{
    		for(std::vector<int>::const_iterator k = (*i).begin(); k != (*i).end(); ++k)
    			std::cout << (*k) << ' ';
    
    		std::cout << std::endl;
    	}
    }
    
    мы передаем в ф-ю матрицу, она модифицируется и мы дальше ее используем(уже измененную).
     
    #6603 Ins3t, 20 Jul 2011
    Last edited: 20 Jul 2011
    1 person likes this.
  4. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Если через зад, используйте указатели.
    Если нормально, тогда возьмите код Ins3t.

    На счет getline.
    :/ http://www.cplusplus.com/forum/general/8383/
     
  5. cipa21

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

    Joined:
    9 Apr 2009
    Messages:
    548
    Likes Received:
    146
    Reputations:
    30
    Во, вспомнил, есть одна проблема которую мне не решить.
    Допустим есть цикл:
    Code:
    for(int i=1;i<n;i++)
    {
    Первой строкой в цикле должен создаться файл с именем "1.txt"
    При втором ходе цикла нужно чтобы создался файл с именем "2.txt"
    Имя файла должно исходить от значения счетчика i
    и т.д....
    }
    
    Вот как это все воплотить в реальность при этом не писать 100 строк?
     
  6. Ins3t

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

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    ну вот как то так можно:

    Code:
    #include <fstream>
    #include <sstream>
    
    int main()
    {
    	std::ofstream output_file;
    
    	for(int i = 0; i < 10; i++)
    	{	
    		std::ostringstream output_string_stream;
    		output_string_stream << "C:\\" << i << ".txt";
    		output_file.open(output_string_stream.str().c_str(), std::ios::out);
    		output_file.close();
    	}
    
    	return 0;
    }
    
     
    1 person likes this.
  7. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    char suffix[] = ".txt";
    char buffer[10];
    int i = 1;
    itoa(i, buffer, 10);
    strcat(buffer, suffix);
     
    1 person likes this.
  8. ubuntu

    ubuntu New Member

    Joined:
    28 Dec 2009
    Messages:
    34
    Likes Received:
    0
    Reputations:
    0
    написал код без преобразований из char в string
    Code:
    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <fstream>
    using namespace std;
    
    
    void main() 
    {	
    	string b, b1, b2, linepass, lineuin, result;
    
    	b = "UIN";
    	b1 = "(hex";
    	b2 = "\n";
    
    	
    	ifstream input("log.txt", ifstream::in);
    	ofstream fout("resultat.txt", ofstream::out);
    
    	int l, dlin, k, i(0);
    	do
    	{
    		l=996;
    		getline(input, lineuin);
    
    		//ищем совпадение в строке
    		l=lineuin.find(b,0);
    
    			//если совпадение есть, то выполняем условие
    			if(l != -1 )
    			{
    				//выдергиваем следующую строку после lineuin, это будущий пароль.
    				getline(input, linepass);
    
    				//копируем уин
    				dlin=lineuin.find(b2, 0);
    				lineuin.assign(lineuin, 10, dlin-11);
    				
    				//копируем пасс
    				k=linepass.find(b1,0);
    				linepass.assign(linepass, 6, k-7);
    				
    				//записываем в файл
    				result = lineuin + ':' + linepass + '\n';
    				fout << result;
    			}
    
    
    		cout<<i++<<endl;
    	}while(input.good());
    
    	input.close();
    	fout.close();
    
    }
    но все равно выходит ошибка при работе с большими файлами.
    Code:
    Unhandled exception at 0x7c812afb in 2011.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0012fb10..
    как быть? :)
     
  9. fiery xray

    fiery xray New Member

    Joined:
    11 Jul 2011
    Messages:
    7
    Likes Received:
    2
    Reputations:
    3
    Code:
    Unhandled exception at 0x7c812afb in 2011.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0012fb10..
    означает буквально следующее: "Непойманное исключение: std::eek:ut_of_range", иначе говоря, твой код генерирует исключение, а ты его не ловишь.

    правильно написать будет так

    Code:
    try {
    	linepass.assign(linepass, 6, k-7);
    } catch (std::out_of_range& e) {
    	cout << "my code is very disorderly so am i"
    }
    
    но важно не это, а то, что ты делаешь нечто, но не понимаешь что ты делаешь
     
    #6609 fiery xray, 21 Jul 2011
    Last edited: 21 Jul 2011
  10. Ins3t

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

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    ставить бляк на обьявление мейна и по шагово выполнять программу(F10). тогда вы увидите, где ошибка.
     
  11. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Используйте boost::regex. Он отлично справляет со строками.
     
  12. ubuntu

    ubuntu New Member

    Joined:
    28 Dec 2009
    Messages:
    34
    Likes Received:
    0
    Reputations:
    0
    я делал так, но ошибка возникает только на 13к строчке и до оттуда не доходил :)

    ну если косяк в проектировании, то укажи в чем.
    так то любое место программы могу объяснить.

    ну это не решение данной проблемы, мне уже принципиально разобраться почему не работает этот код, хотя вроде все верно :(
    но я посмотрю boost::regex, спасибо.
     
    #6612 ubuntu, 21 Jul 2011
    Last edited: 21 Jul 2011
  13. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Выходим за границы контейнера. Вот в чем косяк. Неправильно выполняется одна из двух операций assign.
     
  14. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Кто-то сталкивался, как считать MBR?

    У меня на уме пока что только CreateFile(L"\\\\.\\PhysicalDrive0",...);
     
  15. ubuntu

    ubuntu New Member

    Joined:
    28 Dec 2009
    Messages:
    34
    Likes Received:
    0
    Reputations:
    0

    если закмментировать эти две строчки с функциями assign, то ошибки нету. но программа сама по себе закрывается примерно на 40к строчке.
    в чем косяк? :)
     
  16. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    функция main() заканчивает работу с ней и программный процесс.
     
  17. cipa21

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

    Joined:
    9 Apr 2009
    Messages:
    548
    Likes Received:
    146
    Reputations:
    30
    Что я делаю не так, почему в главную фанкцию значения a и b не возвращаются?
    Code:
    int func(int,int);
    
    void main()
    {	
    	int a=3,b=6;
    	func(a,b);
    	cout<<"a="<<a<<endl;
    	cout<<"b="<<b<<endl;
    }
    
    int func(int a,int b)
    {
    	a=300;
    	b=600;
    	return a,b;
    }
    
    PS. Только что умные люди подсказали "Через оператор return можно вернуть только одно значение. Передача по ссылке нужна, когда необходимо вернуть несколько значений".
    Вопрос закрыт
     
    #6617 cipa21, 22 Jul 2011
    Last edited: 22 Jul 2011
  18. DeepBlue7

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

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Подскажите, как из
    Code:
    LPWSTR
    можно конвертнуть в
    Code:
    char *
    ?

    Заранее спасибо.
     
  19. enigma

    enigma Member

    Joined:
    10 Jul 2011
    Messages:
    80
    Likes Received:
    15
    Reputations:
    7
    Можно с помощью WideCharToMultiByte

    Code:
    char  str[1024];  
    LPWSTR wstr = L"привет";
    WideCharToMultiByte( CP_ACP , 0  , wstr   , -1   , str   ,1023 , 0  , 0  );
    
    MessageBoxA(0,str,"",0);
     
  20. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    http://www.cplusplus.com/reference/clibrary/cstdlib/wcstombs/
    http://msdn.microsoft.com/en-us/library/s7wzt4be%28v=vs.80%29.aspx для новых версий Visual Studio.
     
Thread Status:
Not open for further replies.