Часть 2. Я начинающий, подскажите как...(Все вопросы начинающих!!!)
ListBox1->Columns=3;
каким образом записать строку в второй и третий столбцы?
Я, конечно, издеваюсь. Вместо WindowsForms, MFC и прочего используйте WinAPI. В той жес студии есть такой тип проектов. Это, если я правильно понял вопрос
Немного не то нужно=) Вот чтобы написать оконную программу в блокноте, потом скомпилить и получить рабочие окна, кнопки и т.п.
Эмм. Собственно пишите в блокноте (используя например WinAPI), потом запускайте компилятор из командной строки и будет вам счастье :) (если конечно разберетесь с параметрами коммандной строки).
А какой великий опыт программирования вы пытаетесь получить в Блокноте? Или вы думаете, что VS за вас программу напишет? Все как раз наоборот. Если имеются хорошие средства разработки (не нравится VS, так других полно), а программист ими не пользуется предпочитая Блокнот, то это никоим образом не характеризует его как профи.
button1.Enabled = false;
button2.Enabled = false;
Закоменчивание любой одной из этих строк убирает звуки.
Если на том же месте программы написать
button1.Hide();
button2.Hide();
то никаких проблем нет.
button1.Enabled = false;
button2.Enabled = false;
А так
button2.Enabled = false;
Focus(); // Если обработчик метод класса формы
Хе-хе. Поищите - Microsoft Visual C++ Toolkit 2003. Я правда его использовал чисто как компилятор к Студии 6 (exe оч маленькие получались)
Но там какраз - командная строка, все как надо. Лучший набор для обучения набора компилирующегося и работающего кода вcлепую:)
Плюс доки по нему: http://msdn.microsoft.com/en-us/library/aa290065(VS.71).aspx
button2.Enabled = false;
Focus(); // Если обработчик метод класса формы
Спасибо, помогло!
В MSDN нашёл только метод Focus(), а тут - функция. Что именно происходит?(или дайте, пожалуйста, ссылку на описание)
В MSDN нашёл только метод Focus(), а тут - функция. Что именно происходит?(или дайте, пожалуйста, ссылку на описание)
Это тоже метод, только это метод формы. В данном случае Focus() равносильно this.Focus().
Старая тема - здесь
Просто сначала хочется увидеть все как есть "изнутри", посмотреть что да как, а уже потом переходить к VC. А то VC запускаю, выбираю приложение win32 появляется какой-то код, добавляю кнопку - еще код, что за код не понятно, ибо ни разу не написал необходимый для окон код самостоятельно и осмысленно. Просто визуальная среда ассоциируется с визуал басиком, там кнопку вынес, написал что надо и все, пытался применить подобный метод к С++ =) Не люблю когда в коде есть что-то, что мне непонятно...
данная тема не предназначена для холиваров. посему угомонитесь и впердь более четко формулируйте то что вам надо. Замечание вам сделано вполне верно - кто вам мешает в той же студии писать код "осмысленно" хз знает. Не надо на форуме разговаривать лозунгами, смысла которых вы сами не понимаете - здесь либо вы задавайте конкретные вопросы, либо отправляйтесь туда где с вами ктото будет совместно рассуждать "в блокноте писать круто, в студии не круто патамушто не понятно чего она туда добавляет". Еще одна попытка рассусоливания на данную тему в тематических форумах для вас закончится нехорошо.
делаешь seek в файле по размеру одной записи. как я понимаю, запись в виде структуры будет, и в файле все записи друг за другом. Берешь размер структуры и делаешь смещение относительно начала файла на (номер записи - 1) * размер структуры.
где-то так :)
где-то так :)
что такое seek? я не много не понял. наврятли в виде структуры. мне нужно обработать фаил таким образом чтобы раздулить его на куски. и выборочно куски выводить
int main()
{
int c, i;
char filename[81] ="dkam_6ways.txt", input_line[251];
ifstream file_in(filename);
if (! file_in)
{
cout << "file" << filename;
cout <<" could not be opened.";
exit(1);
}
while(( c = file_in.get()) != '$')
{
cout.put(c);
}
cin.get();
return 0;
}
т.е тут он выводит все что до доллара как мне сделать чтобы допусти он 2 раза пропустил доллар и потом вывел все что до след доллара??
в Гугле набираешь что-то типа: C++ seek
Можно по разному. Если строки одинаковые, то как сказал(а) t-34. Можно вашим способом - пропустите в цикле требуемое число строк.
А можно загрузить все в стандартный контейнер vector, состоящий из строк типа string, а потом вывести нужный элемент.
Заполнять можно с помощью функции:
istream& getline ( istream& is, string& str, char delim );
например
getline(file_in, str, '$');
Можно по разному. Если строки одинаковые, то как сказал(а) t-34. Можно вашим способом - пропустите в цикле требуемое число строк.
А можно загрузить все в стандартный контейнер vector, состоящий из строк типа string, а потом вывести нужный элемент.
Заполнять можно с помощью функции:
istream& getline ( istream& is, string& str, char delim );
например
getline(file_in, str, '$');
Я в принципе понял. Появился еще вопрос а есть ли какая нибудь функция которая делает тоже самое только не из потока(file_in) а из другой строки?
В сторону stringstream
Спс. Сделал все четко. Сделал небольшой цитатничек кому интересно могу кинуть исходничок.
class ccRTP_AudioTransmitter: public Thread, public TimerPort
{
private:
RTPSession *socket;
public:
ccRTP_AudioTransmitter()
{ socket=NULL;}
~ccRTP_AudioTransmitter()
{terminate();delete socket;}
void run(void)
{long i;
i=1;
socket = new RTPSession(host_ip,TRANSMITTER_BASE);
socket->setSchedulingTimeout(10000);
if( !socket->addDestination(host_ip,RECEIVER_BASE) )
cerr << "I could not connect.";
socket->setPayloadFormat(StaticPayloadFormat(sptL16_DUAL));
socket->startRunning();
}
Как видно, создается RTPSession внутри функции run, наследуемой от Thread, как она вызывается, я не знаю, я вызываю только start (тоже от Thread), которая видимо вызывает run. Всё компилится и билдится, но проблема в том, что при дебаге видно, что вот тут socket = new RTPSession(host_ip,TRANSMITTER_BASE); сокету ничего не присваивается, он остается NULL, дальше по коду метода run дебаггер не идет, и потом при первом же обращении к socket выдает SIGSEGV. В примере от разработчиков библиотеки та же ошибка, хотя в релизовой версии всё вроде работает. И еще в редакторе пишет про ошибку Unable to resolve identifier RTPSession и всех методов,связанных с сокетом, хотя при компиляции молчит. Все библиотеки и хедеры подключил как было указано. Помогите, в чем может быть причина.
подскажите в данном разделе!
есть строка-массив char - str[5]="0x0D" - это число 13 в шестнадцатиричной форме, как преобразовать тип к Uint16, что бы получилось 0x0D в Uint16?!
Спасибо!
Спасибо про такое я даже и не подумал, но я всё же буду искать ответ по той ссылке что вы дали ниже.
Если что буду рад всем подсказкам по этой теме:)
int main()
{
f(num);
return 0;
}
void f(unsigned long long int dim)
{
int mass[dim];
}
создает массив переменной длины.для типа unsigned long long int, максимальная размерность массива будет (2^64)-1.размер массива определяется переменной num,которая передается в функцию f().при каждом вызове f создается массив mass разной длины.однако переменные длины могут иметь только локальные массивы,тоесть видимые в блоке или прототипе.все действия с массивом нужно описать в функции f,в main массив будет недоступен.нажеюсь правльно мысль изложил.
Только никому больше не предлагайте ссылок на подобную "страничку для учеников". Не плодите зла.
{
p=(TList*)malloc(sizeof(struct TList));;
if (!p) printf("ERR\n");
p->data=num;
p->next=&list;
list=p;
int s;
scanf("%i",&s);
}
{
p=(TList*)malloc(sizeof(struct TList));;
if (!p) printf("ERR\n");
p->data=num;
p->next=&list;
list=p;
int s;
scanf("%i",&s);
}
Может, если между вызовами malloc вызывается free, и этот кусок освобождается. Но или если есть бага в самой malloc, что менее вероятно.
вот этот код почему то работает отлично,но стоит вставить его в мою функцию...
#include <stdio.h>
#define NUM_INTS 7623
int *memblock;
main()
{
memblock = malloc(NUM_INTS*sizeof(int));
if (memblock==NULL)
printf("Нехватка памяти\n");
else
printf("%i\n",memblock);
memblock = malloc(NUM_INTS*sizeof(int));
int ff;
scanf("%i",&ff);
free(memblock);
}
Сразу попутный вопрос,вот это похоже на создание списка?
#include <stdlib.h>
typedef struct TList
{
int data;
struct TList *next;
}TList;
void init(struct TList *list)
{
list=(struct TList*)malloc(sizeof(struct TList));
if (!list) printf("ERR\n");
list=NULL;
}
void wipe(struct TList *list,struct TList *p)
{
p=list;
while(p->next)
{
p=p->next;
free(list->data);
free(list);
list=p;
}
free(list->data);
free(list);
}
void add(struct TList *list,struct TList *p,int num)
{
p=(TList*)malloc(sizeof(struct TList));;
if (!p) printf("ERR\n");
p->data=num;
p->next=&list;
list=p;
int s;
scanf("%i",&s);
}
void view(struct TList *list,struct TList *p)
{ int i;
p=list;
for(i=1;i<4;i++)
{
printf("%i\n",&list->data);
p=p->next;
}
}
int main()
{
struct TList head,current;
int ss;
init(&head);
head=current;
add(&head,¤t,1);
add(&head,¤t,2);
add(&head,¤t,3);
view(&head,¤t);
wipe(&head,¤t);
scanf("%i",&ss);
return 0;
}
я его еще до конца не отладил,но хотя бы приблизительно?Может я где то в описании структур ошибся...Вчерашний вопрос о использовании списка для возведения числа в 20ю степень побудил меня к изучению списков на Си,вобще я очень посредственно знаком с этим языком,вот и не могу толком разобраться.
int main()
{
f(num);
return 0;
}
void f(unsigned long long int dim)
{
int mass[dim];
}
создает массив переменной длины.для типа unsigned long long int, максимальная размерность массива будет (2^64)-1.
Столько бреда в одном сообщении. И когда люди научаться проверять компилятором свои догадки?
вот этот код почему то работает отлично,но стоит вставить его в мою функцию...
#include <stdio.h>
#define NUM_INTS 7623
int *memblock;
main()
{
memblock = malloc(NUM_INTS*sizeof(int));
if (memblock==NULL)
printf("Нехватка памяти\n");
else
printf("%i\n",memblock);
memblock = malloc(NUM_INTS*sizeof(int));
int ff;
scanf("%i",&ff);
free(memblock);
}
Как вы поняли, что он работает отлично? Отлично для чего? В этом коде сначала выделяется память
А потом сразу же выделяется еще память без освобождения только что выделенной.
int ff;
По поводу списков.
Сразу попутный вопрос,вот это похоже на создание списка?
Нет не похоже. Ну разве что структурой. Функция init бессмысленна по двум причинам:
- Вот это Код:list=(struct TList*)malloc(sizeof(struct TList));
- После чего без освобождения памяти зануляет указатель Код:list=NULL;
В остальных функциях ошибок еще больше.
Почитайте книги:
- Брайан Керниган, Деннис Ритчи. Язык программирования C (здесь про С)
- Брайан Керниган, Роб Пайк. Практика программирования (а здесь найдете про списки)
Что "это"?
Это не мои догадки,такой пример был приведен в книге Герберта Шилдта(Полный справочник по Си,четвертое издание,стр 121,261),а код я проверил,массив создается и заполняется.
изначально код выглядел так
{
char str[dim];
/* ... */
}
я только изменил имя массива и его тип и написал прототип функции.
Можете, но будет утечка памяти.
int main() {
printf( "%i\n", sizeof(int) == sizeof(long int) ); // Упс, а размеры-то равны...
return 0;
}
изначально код выглядел так
{
char str[dim];
/* ... */
}
я только изменил имя массива и его тип и написал прототип функции.
Выделите мне 100000000 элементов в стэке, пожалуйста.
такой вопрос. задача проста, необходимо сделать ввод/вывод в файл/из файла таким образом:
switch()
{
case 1
записываешь в файл.
case 2
считываешь из файла.
}
я сначала думал сделать по case 1 поток out по case 2 - in.
вот как то так:
switch(choice)
{
case 1:
ofstream out("log.txt", ios:: out);
if (!out)
{
cerr << "can't open 'log.txt'.";
return 1;
}
...
...
out.close();
break;
case 2:
ifstream in("log.txt");
if (! in)
{
cerr << "can't open 'log.txt'";
return 1;
}
...
...
in.close();
}
но он мне выдавал ошибку:
\log.cpp jump to case label
\log.cpp crosses initialization of `std:: ofstream out'
я чтото погулил и ничего не нашел дельного.
потом подумал сделать один поток на ввод и вывод. но что-то тоже какойто бред. он то фаил не хочет создавать то еще чтонибудь бредовое.
подскажите может чтото не так делаю.
подскажите может чтото не так делаю.
Вот
{
case 1:
{
ofstream out("log.txt", ios:: out);
if (!out)
{
cerr << "can't open 'log.txt'.";
return 1;
}
...
...
out.close();
}
break;
case 2:
{
ifstream in("log.txt");
if (! in)
{
cerr << "can't open 'log.txt'";
return 1;
}
...
...
in.close();
}
break;
}