Вопрос по C
-
- Новичок
- Posts: 53
- Joined: 05 Jan 1999 10:01
- Location: Moldova
Вопрос по C
Впервые копаюсь в С++
Как сделсть так, что бы окошко после выполнения прграммы не закрывалось?
Спасибо.
RomaFAN
Как сделсть так, что бы окошко после выполнения прграммы не закрывалось?
Спасибо.
RomaFAN
-
- Уже с Приветом
- Posts: 405
- Joined: 16 Apr 2000 09:01
Вопрос по C
Думаю у тебя еще появиться много вопросов, зайди на http://lib.ru/, там есть "УЧЕБНИКИ ПО ПРОГРАММИРОВАНИЮ, C, C++ ( 20 )".
Удачи.
Удачи.
-
- Уже с Приветом
- Posts: 414
- Joined: 16 Mar 2000 10:01
- Location: Salt Lake City, UT, US
Вопрос по C
Зависит от того, чем вы пользуетесь в С. Можно использовать что-то типа *get*, то есть например _getch(). Будет ждать нажатия клавиши на клавиатуре.
-
- Новичок
- Posts: 55
- Joined: 24 Apr 2000 09:01
- Location: Moscow->Haifa->Chicago
Вопрос по C
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by Andrey FAN:
[i:02c49c19f1]Впервые копаюсь в С++
Как сделсть так, что бы окошко после выполнения прграммы не закрывалось?
Спасибо.
RomaFAN [/i:02c49c19f1]<HR></BLOCKQUOTE>
It doesn't have to do with C or C++. It is a Win95/98 setting for DOS windows. I work on NT and am not sure where you can switch it centrally, but look in Control Panel. Also, if You might be able to change it by rightclick the batch file which is responsible for compilation and select Properties. On the Program tab, uncheck "Close on exit".
[i:02c49c19f1]Впервые копаюсь в С++
Как сделсть так, что бы окошко после выполнения прграммы не закрывалось?
Спасибо.
RomaFAN [/i:02c49c19f1]<HR></BLOCKQUOTE>
It doesn't have to do with C or C++. It is a Win95/98 setting for DOS windows. I work on NT and am not sure where you can switch it centrally, but look in Control Panel. Also, if You might be able to change it by rightclick the batch file which is responsible for compilation and select Properties. On the Program tab, uncheck "Close on exit".
-
- Уже с Приветом
- Posts: 588
- Joined: 24 Sep 1999 09:01
Вопрос по C
naverno, proshe vsego zapuskat' programmu iz dos sessii (v command prompt). togda ono uzhe v okne budet, i nechemu budet zakryvat'sya.
a vopros horoshij: ni tebe kompilyator kakoj, ni OS
mozhet on na kakom-nibud' BeOS vse delaet, kotorogo nikto tut ne znaet
a vopros horoshij: ni tebe kompilyator kakoj, ni OS
mozhet on na kakom-nibud' BeOS vse delaet, kotorogo nikto tut ne znaet
-
- Новичок
- Posts: 53
- Joined: 05 Jan 1999 10:01
- Location: Moldova
Вопрос по C
Учебники для начинающих у меня есть, но во всех пишут: введите такой-то код, скомпилируйте, и выполните программу, увидите такой-то результат.
Так вот результат увидеть не успеваю, очень быстро закрывается окошко.
Нигде об этом не нашёл.
В Perl подобную проблему решаю оператором SLEEP :-) Наверное, не правильно, но ничего другого не вычитал.
Подскажите, что, трудно? :-)
RomaFAN
Так вот результат увидеть не успеваю, очень быстро закрывается окошко.
Нигде об этом не нашёл.
В Perl подобную проблему решаю оператором SLEEP :-) Наверное, не правильно, но ничего другого не вычитал.
Подскажите, что, трудно? :-)
RomaFAN
-
- Posts: 5
- Joined: 20 Jul 2000 09:01
- Location: Moldova
Вопрос по C
Нет, из доса запускать не удобно. А в опции то же не то, программа должна сама работать. Вот psx предложил то, что мне надо команду, которая заставляет программу ждать нажатия клавиши, но почему-то компилятор не берет эту команду, может я, что-то не то делаю?
#include <stdio.h>
main()
{
printf ("Hello, Fan!\n");
_getch();
}
Спасибо.
#include <stdio.h>
main()
{
printf ("Hello, Fan!\n");
_getch();
}
Спасибо.
-
- Уже с Приветом
- Posts: 405
- Joined: 16 Apr 2000 09:01
Вопрос по C
Файл заголовка для _getch() - conio.h .
Попробуй еще _kbdhit(). А файл заголовка stdio.h - это для getchar().
Попробуй еще _kbdhit(). А файл заголовка stdio.h - это для getchar().
-
- Уже с Приветом
- Posts: 325
- Joined: 12 Apr 1999 09:01
- Location: NYC
Вопрос по C
Да что Вы право. В NT свойства shortcut. Закрывать или нет после завершения программы.
-
- Posts: 5
- Joined: 20 Jul 2000 09:01
- Location: Moldova
Вопрос по C
Meerkat, большое спасибо. Все работает, хотя пришлось немного подумать, так как вы сделали ошибку, команда kbdhit(); принимается компилятором в виде kbhit();, это наверно от того, что вы спешили мне помочь, и опечатались или вы имели ввиду другую команду?
Еще раз спасибо.
Еще раз спасибо.
-
- Уже с Приветом
- Posts: 405
- Joined: 16 Apr 2000 09:01
Вопрос по C
FANRA:
Да вы правы, это была опечатка, правильно _kbhit. Если у Вас VC++, то можно запускать программу из под отладчика Ctrl+F5, а не F5, тогда можно и без _getch и пр. обойтись.
tevch:
А если Вы работаете не под NT?
Да вы правы, это была опечатка, правильно _kbhit. Если у Вас VC++, то можно запускать программу из под отладчика Ctrl+F5, а не F5, тогда можно и без _getch и пр. обойтись.
tevch:
А если Вы работаете не под NT?
-
- Posts: 5
- Joined: 20 Jul 2000 09:01
- Location: Moldova
Вопрос по C
Meerkat:
Нет, к сожалению я не в VC++ мне до этого долече, как то я сел за него. Голова аж закружилась от этих проектов, конструкторов и прочего, для начало разберусь в просто в С и С++, а уж потом и за V можно. Мне пока что 16. [img:5f58126e6f]http://www.privet.com/ubb/smile.gif[/img:5f58126e6f]
Tevch:
Вы подумайте: вам нужно сделать Кому-то какую-то программу, которая должна выводить результат на экран. Вы ее сделаете, хорошо сделаете, поставите эту галочку. Но вдруг у этого Кого-то эта галочка исчезла или сам он ее убрал, ну мало ли чего может сделать эта винда, и что тогда? А не проще написать kbhit(); и все, и не морочить себе голову?
С уважением FANRA.
Нет, к сожалению я не в VC++ мне до этого долече, как то я сел за него. Голова аж закружилась от этих проектов, конструкторов и прочего, для начало разберусь в просто в С и С++, а уж потом и за V можно. Мне пока что 16. [img:5f58126e6f]http://www.privet.com/ubb/smile.gif[/img:5f58126e6f]
Tevch:
Вы подумайте: вам нужно сделать Кому-то какую-то программу, которая должна выводить результат на экран. Вы ее сделаете, хорошо сделаете, поставите эту галочку. Но вдруг у этого Кого-то эта галочка исчезла или сам он ее убрал, ну мало ли чего может сделать эта винда, и что тогда? А не проще написать kbhit(); и все, и не морочить себе голову?
С уважением FANRA.
-
- Уже с Приветом
- Posts: 325
- Joined: 12 Apr 1999 09:01
- Location: NYC
Вопрос по C
OK. Я думал, что это так, тестовое окошко за полчаса. А ежели проект серьезный то да.
-
- Posts: 5
- Joined: 20 Jul 2000 09:01
- Location: Moldova
Вопрос по C
Tevch:
Даже и если это тестовое окошко за полчаса, неужели удобнее искать этот свеженаписанный файл, создавать ярлык, ставить галочку, потом его запускать? Тестовое окошко- это, на мой взгляд, маленькая программа, которую и не стоит сохранять, так посмотрел, работает, и все.
Даже и если это тестовое окошко за полчаса, неужели удобнее искать этот свеженаписанный файл, создавать ярлык, ставить галочку, потом его запускать? Тестовое окошко- это, на мой взгляд, маленькая программа, которую и не стоит сохранять, так посмотрел, работает, и все.
-
- Posts: 11
- Joined: 07 Oct 1999 09:01
- Location: Kharkov,Ukraine
Вопрос по C
Не подскажете?
Фрагмент:
__________________________________
class A
{
public:
A();
~A();
private:
ULONG* m_2Darray;
};
A::A()
{
m_2Darray = new ULONG[5][5];
}
A::~A()
{
delete [][] m_2Darray;
}
___________________________________
То ли в объявлении m_2Darray, то ли в конструкторе/деструкторе есть ошибки.
Как ни извращался - все равно Compiler Error C2440:
'conversion' : cannot convert from 'type1' to 'type2'
Может, есть вариант правильного кода?
Спасибо,
Роман
Фрагмент:
__________________________________
class A
{
public:
A();
~A();
private:
ULONG* m_2Darray;
};
A::A()
{
m_2Darray = new ULONG[5][5];
}
A::~A()
{
delete [][] m_2Darray;
}
___________________________________
То ли в объявлении m_2Darray, то ли в конструкторе/деструкторе есть ошибки.
Как ни извращался - все равно Compiler Error C2440:
'conversion' : cannot convert from 'type1' to 'type2'
Может, есть вариант правильного кода?
Спасибо,
Роман
-
- Уже с Приветом
- Posts: 9885
- Joined: 18 Apr 2000 09:01
- Location: Moscow -> VA -> Boston, MA
Вопрос по C
Вот так работает:
A::A()
{
m_2Darray = new ULONG[5, 5];
}
A::~A()
{
delete m_2Darray;
}
A::A()
{
m_2Darray = new ULONG[5, 5];
}
A::~A()
{
delete m_2Darray;
}
-
- Уже с Приветом
- Posts: 9885
- Joined: 18 Apr 2000 09:01
- Location: Moscow -> VA -> Boston, MA
Вопрос по C
А как подразумевалось в вопросе?
Вот что там было написано: [i:8328fe5f9d]"То ли в объявлении m_2Darray, то ли в конструкторе/деструкторе есть ошибки. Как ни извращался - все равно Compiler Error C2440: 'conversion' : cannot convert from 'type1' to 'type2'"[/i:8328fe5f9d]
Речь шла об ошибках компиляции а не об ошибках выполнения. Причем сюдя по ошибкам можно однозначно идентифицировать VC++. Так в чем проблема? ЧТо я сказал неправильно?
Вот что там было написано: [i:8328fe5f9d]"То ли в объявлении m_2Darray, то ли в конструкторе/деструкторе есть ошибки. Как ни извращался - все равно Compiler Error C2440: 'conversion' : cannot convert from 'type1' to 'type2'"[/i:8328fe5f9d]
Речь шла об ошибках компиляции а не об ошибках выполнения. Причем сюдя по ошибкам можно однозначно идентифицировать VC++. Так в чем проблема? ЧТо я сказал неправильно?
-
- Новичок
- Posts: 21
- Joined: 05 Jun 1999 09:01
- Location: Minsk, Belarus --> A'dam, The Netherlands
Вопрос по C
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by BOBAH:
[i:2ffb15e442]Вот так работает:
A::A()
{
m_2Darray = new ULONG[5, 5];
}
A::~A()
{
delete m_2Darray;
}
[/i:2ffb15e442]<HR></BLOCKQUOTE>
Где?!!!!
Точнее, то, что компилятор это съел и не подавился - это понятно. А вот чтобы это еще и работало именно так, как подразумевалось в вопросе ...
[This message has been edited by alext (edited 06-09-2000).]
[i:2ffb15e442]Вот так работает:
A::A()
{
m_2Darray = new ULONG[5, 5];
}
A::~A()
{
delete m_2Darray;
}
[/i:2ffb15e442]<HR></BLOCKQUOTE>
Где?!!!!
Точнее, то, что компилятор это съел и не подавился - это понятно. А вот чтобы это еще и работало именно так, как подразумевалось в вопросе ...
[This message has been edited by alext (edited 06-09-2000).]
-
- Уже с Приветом
- Posts: 2107
- Joined: 02 Aug 2000 09:01
- Location: Covina, CA, USA (from SPb, RU)
Вопрос по C
ВОВАН прав. В современных реализациях C++ не нужно писать "delete a[]", а уж тем более "delete a[][]". Достаточно просто "delete a". Когда динамически выделяется блок памяти, в его заголовке и так его размер написан. Память под многомерные массивы все равно выделяется линейно.
P.S. А "delete []a" - совсем плохо. [img:31e38192d2]http://www.privet.com/ubb/smile.gif[/img:31e38192d2]
[This message has been edited by bemby (edited 06-09-2000).]
P.S. А "delete []a" - совсем плохо. [img:31e38192d2]http://www.privet.com/ubb/smile.gif[/img:31e38192d2]
[This message has been edited by bemby (edited 06-09-2000).]
-
- Новичок
- Posts: 21
- Joined: 05 Jun 1999 09:01
- Location: Minsk, Belarus --> A'dam, The Netherlands
Вопрос по C
Ндаааа........... Тьфу, я хотел сказать "мама моя, убереги меня от программ, написанных BOBAHом или bemby" :-)
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by BOBAH:
[i:619d2e1343]А как подразумевалось в вопросе?
[/i:619d2e1343]<HR></BLOCKQUOTE>
Смотрим всего-то одним (!) сообщением выше твоего ответа и видим:
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by Roman S.B.:
[i:619d2e1343]Не подскажете?
m_2Darray = new ULONG[5][5];
[/i:619d2e1343]<HR></BLOCKQUOTE>
Человеку нужен двумерный массив 5 на 5. Т.е. (кто не понял) на 25 элеменов. Вот твой ответ:
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by BOBAH:
[i:619d2e1343]Вот так работает:
A::A()
{
m_2Darray = new ULONG[5, 5];
}
A::~A()
{
delete m_2Darray;
}
[/i:619d2e1343]<HR></BLOCKQUOTE>
"Вот так работает". Блин, нет слов. "Вот так" ты выделил память под 5 (пять), а не 25 (двадцать пять), элементов. Не веришь - скомпилируй и проверь.
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by bemby:
[i:619d2e1343]ВОВАН прав. В современных реализациях C++ не нужно писать "delete a[]", а уж тем более "delete a[][]". Достаточно просто "delete a". Когда динамически выделяется блок памяти, в его заголовке и так его размер написан. Память под многомерные массивы все равно выделяется линейно.
P.S. А "delete []a" - совсем плохо. [img:619d2e1343]http://www.privet.com/ubb/smile.gif[/img:619d2e1343]
[/i:619d2e1343]<HR></BLOCKQUOTE>
Этот смайлик относится ко всему сообщению, или только к P.S.?
Мое предположение, что только к P.S. А поэтому:
ВОВАН [b:619d2e1343]не[/b:619d2e1343] прав. Ты, соответственно, тоже.
<OL TYPE=1>
<LI> "delete a[][]" - просто синтаксическая ошибка. "delete[][] a", кстати, тоже.
<LI> Не вижу ничего смешного в конструкции "delete []a". Абсолютно нормальный С++.
<LI> Про "Достаточно просто delete a" расскажи стандартизаторам от C++. Может, они "осознают всю глубину своей неправоты" и изменят стандарт.
<LI> "Course mode on"
Освобождение памяти - это только часть того, что выполняют "operator delete" и "operator delete[]". Они еще и деструкторы вызывают (деструктор - это такая... ну да ладно). Так вот, "operator delete" вызывает деструктор только для одного элемента. А "operator delete[]" вызывает деструктор для всех элементов массива.
Для особо неверящих советую скомпилять и [b:619d2e1343]запустить[/b:619d2e1343] вот такую программку:
<BLOCKQUOTE><font size="1" face="Arial">code:</font><HR><pre>#include <stdio.h>
class A {
public:
A();
~A();
};
A::A() {}
A::~A() { printf("~A()\n"); }
int main() {
A* a1 = new A[2];
A* a2 = new A[2];
printf("Deleting via delete[]\n");
delete[] a2;
printf("Deleting via delete\n");
delete a1;
return 0;
}</pre><HR></BLOCKQUOTE>
"Course mode off"
</OL>
[This message has been edited by alext (edited 07-09-2000).]
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by BOBAH:
[i:619d2e1343]А как подразумевалось в вопросе?
[/i:619d2e1343]<HR></BLOCKQUOTE>
Смотрим всего-то одним (!) сообщением выше твоего ответа и видим:
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by Roman S.B.:
[i:619d2e1343]Не подскажете?
m_2Darray = new ULONG[5][5];
[/i:619d2e1343]<HR></BLOCKQUOTE>
Человеку нужен двумерный массив 5 на 5. Т.е. (кто не понял) на 25 элеменов. Вот твой ответ:
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by BOBAH:
[i:619d2e1343]Вот так работает:
A::A()
{
m_2Darray = new ULONG[5, 5];
}
A::~A()
{
delete m_2Darray;
}
[/i:619d2e1343]<HR></BLOCKQUOTE>
"Вот так работает". Блин, нет слов. "Вот так" ты выделил память под 5 (пять), а не 25 (двадцать пять), элементов. Не веришь - скомпилируй и проверь.
<BLOCKQUOTE><font size="1" face="Arial">quote:</font><HR>Originally posted by bemby:
[i:619d2e1343]ВОВАН прав. В современных реализациях C++ не нужно писать "delete a[]", а уж тем более "delete a[][]". Достаточно просто "delete a". Когда динамически выделяется блок памяти, в его заголовке и так его размер написан. Память под многомерные массивы все равно выделяется линейно.
P.S. А "delete []a" - совсем плохо. [img:619d2e1343]http://www.privet.com/ubb/smile.gif[/img:619d2e1343]
[/i:619d2e1343]<HR></BLOCKQUOTE>
Этот смайлик относится ко всему сообщению, или только к P.S.?
Мое предположение, что только к P.S. А поэтому:
ВОВАН [b:619d2e1343]не[/b:619d2e1343] прав. Ты, соответственно, тоже.
<OL TYPE=1>
<LI> "delete a[][]" - просто синтаксическая ошибка. "delete[][] a", кстати, тоже.
<LI> Не вижу ничего смешного в конструкции "delete []a". Абсолютно нормальный С++.
<LI> Про "Достаточно просто delete a" расскажи стандартизаторам от C++. Может, они "осознают всю глубину своей неправоты" и изменят стандарт.
<LI> "Course mode on"
Освобождение памяти - это только часть того, что выполняют "operator delete" и "operator delete[]". Они еще и деструкторы вызывают (деструктор - это такая... ну да ладно). Так вот, "operator delete" вызывает деструктор только для одного элемента. А "operator delete[]" вызывает деструктор для всех элементов массива.
Для особо неверящих советую скомпилять и [b:619d2e1343]запустить[/b:619d2e1343] вот такую программку:
<BLOCKQUOTE><font size="1" face="Arial">code:</font><HR><pre>#include <stdio.h>
class A {
public:
A();
~A();
};
A::A() {}
A::~A() { printf("~A()\n"); }
int main() {
A* a1 = new A[2];
A* a2 = new A[2];
printf("Deleting via delete[]\n");
delete[] a2;
printf("Deleting via delete\n");
delete a1;
return 0;
}</pre><HR></BLOCKQUOTE>
"Course mode off"
</OL>
[This message has been edited by alext (edited 07-09-2000).]
-
- Уже с Приветом
- Posts: 9885
- Joined: 18 Apr 2000 09:01
- Location: Moscow -> VA -> Boston, MA
Вопрос по C
ОК. Уел. Действительно с многомерными массивами я давно не работал вот и облажался. Странно только, что компилятор записть типа ULONG[5, 5] съел. Ну да ладно. Моя ошибка, признаю.
На счет деструкторов и оператора delete я все знаю. Но в то же время мне интересно с каких это пор у типа ULONG появился деструктор? А для элементарных типов удаление по delete без скобок работает корректно.
А теперь, мил человек alext, расскажи, а как бы ты ответил на заданный вопрос? А то критиковать все умеют...
На счет деструкторов и оператора delete я все знаю. Но в то же время мне интересно с каких это пор у типа ULONG появился деструктор? А для элементарных типов удаление по delete без скобок работает корректно.
А теперь, мил человек alext, расскажи, а как бы ты ответил на заданный вопрос? А то критиковать все умеют...
-
- Уже с Приветом
- Posts: 2107
- Joined: 02 Aug 2000 09:01
- Location: Covina, CA, USA (from SPb, RU)
Вопрос по C
Виноват, виноват...
Не прав.
Забавно, пишу на C++ с 91-го, но ни разу не использовал массив объектов (сначала были TCollection, потом CArray и STL vector).
Помню конструкцию delete [] c книги Страуструпа, но счел ее устаревшей (не книгу).
А конструкция ulong a[5,5] вполне правильна с точки зрения языка, только смысла в ней нет. Оператор "," используется для "evaluate two or more expressions in contexts where only one expression is allowed", т.е. результатом выражения 5,5 будет 5, как последнее выражение в списке.
Не прав.
Забавно, пишу на C++ с 91-го, но ни разу не использовал массив объектов (сначала были TCollection, потом CArray и STL vector).
Помню конструкцию delete [] c книги Страуструпа, но счел ее устаревшей (не книгу).
А конструкция ulong a[5,5] вполне правильна с точки зрения языка, только смысла в ней нет. Оператор "," используется для "evaluate two or more expressions in contexts where only one expression is allowed", т.е. результатом выражения 5,5 будет 5, как последнее выражение в списке.
-
- Уже с Приветом
- Posts: 2107
- Joined: 02 Aug 2000 09:01
- Location: Covina, CA, USA (from SPb, RU)
Вопрос по C
Да, а правильный код в том примере будет таким:
<BLOCKQUOTE><font size="1" face="Arial">code:</font><HR><pre>
class A
{
public:
A();
~A();
private:
long(*m_2Darray)[5];
};
A::A()
{
m_2Darray = new long[5][5];
}
A::~A()
{
delete [] m_2Darray;
}
</pre><HR></BLOCKQUOTE>
<BLOCKQUOTE><font size="1" face="Arial">code:</font><HR><pre>
class A
{
public:
A();
~A();
private:
long(*m_2Darray)[5];
};
A::A()
{
m_2Darray = new long[5][5];
}
A::~A()
{
delete [] m_2Darray;
}
</pre><HR></BLOCKQUOTE>
-
- Уже с Приветом
- Posts: 9885
- Joined: 18 Apr 2000 09:01
- Location: Moscow -> VA -> Boston, MA
Вопрос по C
А как быть со случаем, когда обе размерности неизвестны? А то какой смысл в двумерном массиве у которого одна размерность фиксируется при объявлении... [img:0de4b2547c]http://www.privet.com/ubb/smile.gif[/img:0de4b2547c]
Есть ли какия-то возможность задать такой массив и выделить его по new без применения приведения типов?
Есть ли какия-то возможность задать такой массив и выделить его по new без применения приведения типов?
-
- Уже с Приветом
- Posts: 2107
- Joined: 02 Aug 2000 09:01
- Location: Covina, CA, USA (from SPb, RU)
Вопрос по C
Встречный вопрос: а зачем вообще многомерные массивы нужны?
Массив любой размерности замечательно получается из одномерного:
1. a = new long[Na*Nb*Nc...*Nz] - allocation
2. a[a + b*Na + c*(Nb*Na) + .. + z*(Na*Nb*...*Ny)] - адресация
где Na..Nz - размерности массива
а а..z - индексы по ним.
Массив любой размерности замечательно получается из одномерного:
1. a = new long[Na*Nb*Nc...*Nz] - allocation
2. a[a + b*Na + c*(Nb*Na) + .. + z*(Na*Nb*...*Ny)] - адресация
где Na..Nz - размерности массива
а а..z - индексы по ним.