Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

getchar() там стоит, чтобы забрать из принятой scanf строки символ перехода (он образуется при нажатии на Enter)
break - выход из конструкции switch. Если не использовать его, то будет исполняться чёрти-что. Ставится он в конце каждой условной процедуры (case:) конструкции.

default: - это условие по умолчанию, которое исполняется в этой конструкции, если значение не подходит ни по одному условию (case:) оператора.
Вот простой пример меню на switch'е:

Код: Выделить всё

void About(void){...}
void Help(void){...}
void Cfg(void){...}
void Kernel(void){...}

void Menu(void)
{
   system("cls");
   cout << " ***************************************************************" << endl;
   display(" * DX Control Server                             DX168B(c)2011 *");
   cout << " ***************************************************************" << endl;
   display(" *                         Главное меню                        *");
   cout << " *----------*" << endl;
   display(" *   1 - Запуск сервера.                                       *");
   display(" *   2 - Настройки программы.                                  *");
   display(" *   3 - Краткая справка.                                      *");
   display(" *   4 - О программе.                                          *");
   display(" *   5 - Выход.                                                *");
   cout << " ***************************************************************" << endl;
}

void main(void)
{
   Menu();
   while(1)
   {
      switch(_getch())
      {
         case '1' : Kernel(); Menu(); break;
         case '2' : Cfg(); Menu(); break;
         case '3' : Help(); Menu(); break;
         case '4' : About(); Menu(); break;
         case '5' : exit(1); break;
      }
   }
}


display("..."); - это моя собственная функция для отображения русского текста в консоли.
тебе вместо неё cout или printf("...");
А вот простой и рабочий пример калькулятора для основных операций с целыми числами:

Код: Выделить всё

#include <stdio.h>
#include <conio.h>

void main(void)
{
   int a, b, c=0;
   char s='s';
   printf("Vvedite primer:\n");
   scanf("%d%c%d", &a, &s, &b);
   switch(s)
   {
      case '+': c=a+b; break;
      case '-': c=a-b; break;
      case '*': c=a*b; break;
      case '/': c=a/b; break;
      default: printf("Nedopustimyi znak %c\n", s); break;
   }
   printf("resultat: %d", c);
   _getch();
}

В ответ на запрос программы пишем, например 10+20 и жмём Enter.
Тут-же выйдет результат. Если написать, например 10g20, то программа ругнётся, что знак недопустимый.
I am DX168B and this is my favourite forum on internet!
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Re: Вопросы по С/С++ (СИ)

Сообщение lix »

DX168B писал(а):break - выход из конструкции switch. Если не использовать его, то будет исполняться чёрти-что.


почему это черти-что? вполне определенно что :)
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

Следующие условия по порядку исполняться будут. :)))
Это так, напугать новичка. :)))
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
sergeys
Поставщик валерьянки для Кота
Сообщения: 1946
Зарегистрирован: Сб сен 11, 2010 13:45:01
Откуда: Екатеринбург

Re: Вопросы по С/С++ (СИ)

Сообщение sergeys »

DX168B писал(а):Следующие условия по порядку исполняться будут. :)))
Это так, напугать новичка. :)))

Угу спасибо все понял! :beer: Щас пойду поставлю редактор интерфейсов..........

Да не надо меня пугать, я понимаю что он будет делать
Ко мне можно на "ты", так даже лучше!
Аватара пользователя
sergeys
Поставщик валерьянки для Кота
Сообщения: 1946
Зарегистрирован: Сб сен 11, 2010 13:45:01
Откуда: Екатеринбург

Re: Вопросы по С/С++ (СИ)

Сообщение sergeys »

Хм, попробовал ваш код, нет файла #include <conio.h> де взять?
Ко мне можно на "ты", так даже лучше!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

У меня другая среда (Visual Studio). Можно просто убрать её и убрать _getch() в конце кода.
У меня описание этой функции(_getch()) в этом заголовочнике.
_getch() я ставил для того, чтобы программа не закрылась сразу, а только когда нажму на любую клавишу. Просто в винде есть такая бяка. Консоль сразу закрывается и результат не успеешь рассмотреть.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
sergeys
Поставщик валерьянки для Кота
Сообщения: 1946
Зарегистрирован: Сб сен 11, 2010 13:45:01
Откуда: Екатеринбург

Re: Вопросы по С/С++ (СИ)

Сообщение sergeys »

DX168B писал(а):У меня другая среда (Visual Studio). Можно просто убрать её и убрать _getch() в конце кода.
У меня описание этой функции(_getch()) в этом заголовочнике.
_getch() я ставил для того, чтобы программа не закрылась сразу, а только когда нажму на любую клавишу. Просто в винде есть такая бяка. Консоль сразу закрывается и результат не успеешь рассмотреть.

Да так уже и сделал, у меня прямо в среде выполняет, не в терминале
Ко мне можно на "ты", так даже лучше!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

У меня надо нажать на BUILD и потом на RUN Открывается окно консоли и там работает уже моя программа. У меня это проект консольного приложения. Но я могу и MFC задействовать и просто Win32 для написания оконной программы. В линуксах я незнаю, как там, но знаю, что окна делаются совсем по другому.
I am DX168B and this is my favourite forum on internet!
ksv82
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пт мар 18, 2011 12:41:09

Re: Вопросы по С/С++ (СИ)

Сообщение ksv82 »

Пробовал ли кто нибудь на авр работать с памятью таким образом?

Код: Выделить всё

#include <stdlib.h>
.
.
*p=malloc(10);
.
.
free(p);

Судя по всему работать оно должно, но вот насколько стабильно уже вопрос.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

а почему оно должно быть нестабильно? просто памяти маловато (как программной, так и ОЗУ), а динамическое распределение кучи отнимает и ОЗУ и флеш... ну и сам процесс выделения занимает какое-то время... думаю, это можно использовать в atmega128 или atmega25xx - короче, в "больших" AVR. не буду утверждать, но работа с TCP/IP вся на таком принципе построена - никто не жалуется, вроде... хотя я не применял этот подход пока что: не было необходимости
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
ksv82
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пт мар 18, 2011 12:41:09

Re: Вопросы по С/С++ (СИ)

Сообщение ksv82 »

Хотя и правда, тут главное учесть что в отличие от x86 на avr память вполне может не выделиться по причине ее отсутствия, а с остальным проблем быть не должно, если уж в tcp/ip стеке такой метод используют.
Аватара пользователя
demonchik
Встал на лапы
Сообщения: 94
Зарегистрирован: Вт апр 07, 2009 13:39:13
Откуда: одесса
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение demonchik »

всем доброго времени суток. хлопцы(а может и девушки среди нас есть), подскажите, как правильно выносить свои функции в библиотеки, и как правильно оформлять чтоб не пришлось в каждой подключать одни и те же библиотеки. как то без этого раньше обходился, а сейчас нужно стало. :sleep:
радиоэлектроника - жизнь моя...
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

Я обычно пишу хейдеры, в которых просто пишу свои функции.
Всё это добро кидаю, где-нибудь в какую-нибудь папку.
В опциях среды добавляю путь к этой папке. Это делается один раз и в дальнейшем, при создании новых проектов, эта пака автоматом будет учитываться средой. После этого я могу просто написать:

Код: Выделить всё

#include <MyHeader.h>

И хейдер подключен проекту.
Если я конечно понял Вашу ситуацию.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

DX168B писал(а):Я обычно пишу хейдеры, в которых просто пишу свои функции.
вы делаете неправильно. в хидерах не должно быть реализаций функций, должны быть только заголовки (прототипы, описания). разве что inline-функции или макросы-функции могут там быть в виде исключения...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

А где их держать? В либах?
А их описания в хидерах?
Типа так?
Пишем либу: CPP

Код: Выделить всё

#include <stdio.h>

void Test(const char *txt)
{
   printf(txt);
}

Хидер либы: *.h

Код: Выделить всё

void Test(const char *txt);
Последний раз редактировалось DX168B Вс май 08, 2011 22:45:21, всего редактировалось 1 раз.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

DX168B писал(а):А где их держать? В либах?
А их описания в хидерах?

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

Мой уютный бложик... заходите!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

ОК. С либами есть уже навыки. Уже компилил их несколько раз. :)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
demonchik
Встал на лапы
Сообщения: 94
Зарегистрирован: Вт апр 07, 2009 13:39:13
Откуда: одесса
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение demonchik »

ок. я это понял. в файле *.c хранятся реализации функций, а в *.h - прототипы, инклуды и определения. а если я использую какую - то функцию из <stdio.h> в одном *.c и в другом файлике *.c, мне нужно эту библу включать везде?
радиоэлектроника - жизнь моя...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

demonchik писал(а):а если я использую какую - то функцию из <stdio.h> в одном *.c и в другом файлике *.c, мне нужно эту библу включать везде?
да
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
demonchik
Встал на лапы
Сообщения: 94
Зарегистрирован: Вт апр 07, 2009 13:39:13
Откуда: одесса
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение demonchik »

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

Вернуться в «Разные вопросы по МК»