Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 629 • Страница 26 из 32<  1 ... 23  24  25  26  27  28  29 ... 32  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 07.01.2010
плин, строка из 1 символа - это не char, а char[2] - во-первых указатель, а во-вторых 2 символа (0 ещё в хвосте).

а для юзания сишных функций и сисколов придумали string.c_str()



Партнер
 

Member
Статус: Не в сети
Регистрация: 06.05.2009
ToSHiC спс, вот что получилось в итоге (даже работает как задумано):
Код:
#include <iostream>
#include <string>
using namespace std;

class creator
 {
 public:
    string rar,jpg;

    int init()
    {
       cout << "rar: ";
       cin  >>  rar;
       cout << "jpg: ";
       cin  >> jpg;
       if ((rar!="") & (jpg!=""))
         {return 1;}
       else
         {return 0;}
    }

    void make()
    { 
      string keke;
     keke="copy /b "+jpg+" + "+rar+" result.jpg";
     cmd(keke);
     }

 private:
    void cmd(string inpu)
    {
       char* s = new char[inpu.length()+1]();
       strcpy(s, inpu.c_str());
       system (s);
      system ("@echo OK");
     }
  };
int main()
{   
   creator pip;
   switch(pip.init())
   {   case 0: system ("@echo input error"); break;
       case 1: pip.make(); break;
      default: system ("@echo fail"); break;   }
   system ("pause");
   return 0;
}


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
скажи, а в чём сакральный смысл
Код:
char* s = new char[inpu.length()+1]();
       strcpy(s, inpu.c_str());

?
с учётом того, что ты ещё и память потом не освобождаешь.

ну и
Код:
system ("@echo fail");
- это мощно:) запулить вывод на экран через сискол+шелл... чем cout не угодил то?


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
Код:
char* s = new char[inpu.length()+1]();
       strcpy(s, inpu.c_str());

system(); не работает со string

Код:
system ("@echo fail");

я до этого изучал делфи, посему вывод через system выглядит привычнее, чем через cout (:

Новый вопрос: почему тут не удаляется указатель h (вываливается ошибка при выполнении)?
Код:
#include <iostream>
using namespace std;

int i=15;
 
int main()
{
 int i=34, y;
                 
 cout << "y=";
 cin >> y;

 int *h;
 h=&y;
 cout << "\n *h_y==" << *h;
 h=&i;
 cout << "\n *h_i==" << *h;
 h=&::i;
 cout << "\n *h_::i==" << *h;
 delete h;

 cout << "\n";
 system ("pause");
 return 0;
  }


Цитата:
ОС Windows инициировала точку останова в poi.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в poi.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит poi.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки


 

Member
Статус: Не в сети
Регистрация: 02.02.2008
Откуда: Ростов-на-Дону
Фото: 3
mars478 писал(а):
почему тут не удаляется указатель h

Жесть. Для начала хорошо бы понимать что и откуда должно удаляться.


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
указатель - это адрес, а очищаться должна память, на которую он указывает.

и к тому же, у тебя i находится в пространстве std, а не в глобальном, так что использование ::i некорректно


 

Member
Статус: Не в сети
Регистрация: 02.02.2008
Откуда: Ростов-на-Дону
Фото: 3
ToSHiC писал(а):
указатель - это адрес, а очищаться должна память, на которую он указывает.

Чему там отчищаться? Нигде выделения динамической памяти не было. Товарищ mars478 видимо совершенно не понимает, что значит ключевое слово "delete". В приведённом коде происходит попытка освобождения памяти из кучи, но данная память кучи не принадлежит (это статическая память), что естественно рушит саму кучу. mars478, взгляни на код функции delete - это сишный free:
Код:
void operator delete( void * p )
{
    RTCCALLBACK(_RTC_Free_hook, (p, 0));

    free( p );
}

ToSHiC писал(а):
и к тому же, у тебя i находится в пространстве std, а не в глобальном, так что использование ::i некорректно

Как i умудрилась попасть в пространство std? В коде присутствуют две переменные i - стековая и глобальная, ::i - это обращение к глобальной.


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
Obscury писал(а):
ToSHiC писал(а):
указатель - это адрес, а очищаться должна память, на которую он указывает.

Чему там отчищаться? Нигде выделения динамической памяти не было. Товарищ mars478 видимо совершенно не понимает, что значит ключевое слово "delete". В приведённом коде происходит попытка освобождения памяти из кучи, но данная память кучи не принадлежит (это статическая память), что естественно рушит саму кучу. mars478, взгляни на код функции delete - это сишный free:
Код:
void operator delete( void * p )
{
    RTCCALLBACK(_RTC_Free_hook, (p, 0));

    free( p );
}


я к этому и клоню:) тут надо понять концепцию указателей 1 раз, потом всё станет легко и приятно. мб лучше даже для этого начать с С, а не с плюсов. в плючах, из-за объектности, всё это намного менее наглядно, деструкторы всякие и т.д.
Obscury писал(а):
ToSHiC писал(а):
и к тому же, у тебя i находится в пространстве std, а не в глобальном, так что использование ::i некорректно

Как i умудрилась попасть в пространство std? В коде присутствуют две переменные i - стековая и глобальная, ::i - это обращение к глобальной.

у него в начале кода using namespace std. в какой области имён будет находиться глобальная переменная i? я думаю, что в std::, но не уверен.


 

Member
Статус: Не в сети
Регистрация: 02.02.2008
Откуда: Ростов-на-Дону
Фото: 3
ToSHiC писал(а):
у него в начале кода using namespace std. в какой области имён будет находиться глобальная переменная i? я думаю, что в std::, но не уверен.

Нет, конечно. i будет находиться в глобальном пространстве имён. Смысл using директивы совсем в другом.


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
"Все хорошо"(с), за время отсутствия я осилил Подбельского "Язык С++" и сейчас осваиваю "Полный справочник по С++" Шилдта. Тот косяк с указателем понятен- delete применим только для указателя на участок динамически выделенной памяти (посредством new).
Новый вопрос: есть класс, суть которого в вычислении некоего значения. В консоли все работает, захотелось прикрутить гуй. Где объявлять объект этого класса, чтобы при клике по кнопке в текстбоксе появлялось нужное значение?
Код:
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
          {
             if ((textBox1->Text) && (textBox2->Text))
              {
                                                         //Calc -объект того самого класса, calc- метод, возвращающий значение во float
                //textBox3->Text=Calc.calc( (double.Parse(textBox1->Text)) , Calc.inputEps(int.Parse(textBox2->Text)) );
                                                         //^"продвинутый" вариант с вводом данных через два текстбокса
                 textBox3->Text=System::Convert::ToString( Calc.calc(0.1,5) );
                                                         //^отладочный вариант с "вшитыми" входными параметрами
               }
           }

В stdafx.h подключен L2.h (с прототипом моего класса);
В L2.CPP подключен stdafx.h;
В lab2_gui.CPP (главный файл проекта) подключены stdafx.h и Form1.h.
ЗЫ все проворачивается в VS2008.


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
проще всего пихнуть в глобальные переменные указатель, в момент инициализации формы создать объект, а в момент наатия на кнопку - дёргать вызовы. так сказать, грязный метод :)


 

Member
Статус: Не в сети
Регистрация: 09.03.2007
Откуда: ~5km от Москвы
помогите пожалуйста, может кто делал надо в виде win 32 console сделать на с++

Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка совпадает с k-м столбцом.
Найти сумму элементов в тех строках, которые содержат хотябы один отрицательный элемент.

ну т.е чтобы программа искала столбцы равные строкам ( матрицу сами задаем, вводим с клавиатуры)
и проверяла строки на отрицательный элемент и если находила его , то складывала все элементы строки. и проверяла дальше т.к может быть несколько строк.

:weep:


 

Member
Статус: Не в сети
Регистрация: 17.10.2005
Romi4
Код:
#define SIZE 8
/*...*/
for (int q=0; q<SIZE; q++) {
      int cmp_str=0;
      int cmp_zero=0;
      int sum=0;
      for (int w=0; w<SIZE; w++) {
         if (!cmp_str && mA[q][w]!=mA[w][q]) cmp_str++;
         if (mA[q][w]<0) cmp_zero=1;
         sum+=mA[q][w];
         }
      if (!cmp_str) printf("%d-th row is equal to %d-th column\n", q+1, q+1);
      if (cmp_zero) printf("%d-th rows' sum: %d\n", q+1, sum);
      }


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
ToSHiC на выходных погонял С++ -никак не могу осилить гуй на mfc; ради интереса залез в шарп и, извиняюсь, чуть не уделался от восторга- в коде намного меньше %мусора% (насколько я понял, там гуй в коде почти не отображается), и взаимодействовать с элементами намного проще.
Вопрос: какой фреймворк лучше начинать изучать, чтобы и несложен был, и возможности приличные? От mfc уже получил баттхерт, в qt что-то работающее накидал, но сам не понял как... Или же мб стоит изучить с++ на уровне стандарта, а потом перейти на C# с .net или Java со Swing`ом ?


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
а я гуёвые софтины на с++ только один раз, юзал wxwidget - как бы кросплатформенно, да, но мне не понравилось вообще. в детстве был развращён delphi :) там интерфейсики легко рисовались

а что изучать зависит от того, что хочешь получить. я вот на работе вообще бэкэндом занимаюсь, и с гуями возиться не люблю. и с css при создании каких нить веб-страничек возиться тож не люблю, так что я бы выбрал c++0x в комплекте с бустом либо жаву. то то я, а это ты, решать тебе :)


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
По специальности мне предстоит познать лабвью,матлаб и чистый си; посему для себя я хз что выбирать- в любом случае, в академических целях это не будет применено. Но, допустим, если пытаться устроиться джуниор-кодером, С++ с stl и boost`ом будет достаточно?


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 27.04.2010
mars478 писал(а):
ToSHiC на выходных погонял С++ -никак не могу осилить гуй на mfc; ради интереса залез в шарп и, извиняюсь, чуть не уделался от восторга- в коде намного меньше %мусора% (насколько я понял, там гуй в коде почти не отображается), и взаимодействовать с элементами намного проще.
Вопрос: какой фреймворк лучше начинать изучать, чтобы и несложен был, и возможности приличные? От mfc уже получил баттхерт, в qt что-то работающее накидал, но сам не понял как... Или же мб стоит изучить с++ на уровне стандарта, а потом перейти на C# с .net или Java со Swing`ом ?

mfc устаревшая хрень ориентироваться на которую ни в коем случае не надо и не надо идти в конторы где она юзается.

Под с++ единственная легкая среда разработки интерфейсов - это билдер. Можно повозиться с qt но там геморра уже достаточно (хотя все равно лучше чем mfc)

_________________
избранный пришел


 

Member
Статус: Не в сети
Регистрация: 17.10.2005
Альтруист
А winforms?


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 27.04.2010
winforms это вообще то шарп

_________________
избранный пришел


 

Member
Статус: Не в сети
Регистрация: 17.02.2009
Откуда: Россия, Пермь
Не могли бы объяснить зачем нужен массив otv
Код:
//Решение системы лин. уравнений методом Гаусса
#include <stdafx.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 50

void cls()
{
for (int i=0; i<25; i++) printf( "\n" );
}

int main( void )
{
  double mas[N] [N + 1]; //Матрица
  double x[N]; //Корни системы
  int otv[N]; //Отвечает за порядок корней
  int i, j, k, n, f;
  //Ввод данных

cls();


printf( "Vvedite 4iclo uravnenii sistemy ot 2 do 50= " );
scanf( "%d", & n );
if (N < n)
printf( "Slishkom bolshoe 4islo urabnenii. Povtorite vvod\n" );

  while ( N < n );
  printf( "Vvedite sistemy:\n" );
  for ( i = 0; i < n; i++ )
    for ( j = 0; j < n + 1; j++ )
      scanf( "%lf", & mas[i] [j] );
  //Вывод введенной системы

  printf( "Sistema:\n" );
  for ( i = 0; i < n; i++ )
  {
    for ( j = 0; j < n + 1; j++ )
      printf( "%7.2f ", mas[i] [j] );
    printf( "\n" );
  }
  //Сначала все корни по порядку
  for ( i = 0; i < n + 1; i++ )
    otv[i] = i;
  //Прямой ход метода Гаусса
  for ( k = 0; k < n; k++ )
  {
    if ( fabs( mas[k] [k] ) < 0.0001 )
    {
      printf( "Sistema ne imeet reshenii" );
     scanf( "%d", & f );
      return ( 0 );
    }
    for ( j = n; j >= k; j-- )
      mas[k] [j] /= mas[k] [k];
    for ( i = k + 1; i < n; i++ )
      for ( j = n; j >= k; j-- )
        mas[i] [j] -= mas[k] [j] * mas[i] [k];
  }
  //Обратный ход
  for ( i = 0; i < n; i++ )
    x[i] = mas[i] [n];
  for ( i = n - 2; i >= 0; i-- )
    for ( j = i + 1; j < n; j++ )
      x[i] -= x[j] * mas[i] [j];
  //Вывод результата
  printf( "Otvet:\n" );
  for ( i = 0; i < n; i++ )
    for ( j = 0; j < n; j++ )
      if ( i == otv[j] )
      { //Расставляем корни по порядку
        printf( "%f\n", x[j] );
        break;
      }
     scanf( "%d", & f );
  return ( 0 );

}

_________________
СЧАСТЬЕ ДЛЯ ВСЕХ, ДАРОМ, И ПУСТЬ НИКТО НЕ УЙДЁТ ОБИЖЕННЫЙ!(c)Стругацкие Пикник на обочине


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 629 • Страница 26 из 32<  1 ... 23  24  25  26  27  28  29 ... 32  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan