PDA

Просмотр полной версии : C++


azalio
10.12.2005, 15:12
Есть тут люди, кто в этом шарит? :-)
Есть вопросы - хотел бы задать :-)

Kostyan
10.12.2005, 19:07
А ты спрашивай конкретно, авось кто и поможет :)

azalio
10.12.2005, 22:40
А ты спрашивай конкретно, авось кто и поможет :)

Почему вместо printf во всех учебниках по c++ используют убогий std::cout?

Foxter
11.12.2005, 00:11
azalio имхо потому что учебники... и делаются оные для нубов!

azalio
11.12.2005, 00:20
azalio имхо потому что учебники... и делаются оные для нубов!

Так ведь приучают людей то к такому синтаксису...

NEOn
11.12.2005, 16:16
А потому что удобнее такой синтаксис!
А лучше вписать в начале using namespace std;
и писать просто cout << var;
чем std::cout << var;

azalio
11.12.2005, 22:30
А потому что удобнее такой синтаксис!
А лучше вписать в начале using namespace std;
и писать просто cout << var;
чем std::cout << var;

Ты меня не понял.
Мне не нравится cout << var, мне кажется _намного_ удобнее использовать printf("Что-то");

Vadya corp.
12.12.2005, 11:17
Когда я изучал Си - я сразу начал писать printf и scanf, ибо нех юзать устаревший, и не совсем удобный cout. А если, что, то я знаю :)

NEOn
12.12.2005, 17:29
Когда я изучал Си - я сразу начал писать printf и scanf, ибо нех юзать устаревший, и не совсем удобный cout. А если, что, то я знаю
:-D Как раз printf и scanf устаревшие! )

трава
15.12.2005, 19:22
Эмм...мне вот учебники встречались, только с printf и scanf.
Ну в общем, это и использую...не жалуюсь, вполне удобно.

NEOn
16.12.2005, 16:30
Эмм...мне вот учебники встречались, только с printf и scanf.
Ну в общем, это и использую...не жалуюсь, вполне удобно.
Это функции именно из C пришли... в C++ есть новее и удобнее..

azalio
16.12.2005, 22:11
Это функции именно из C пришли... в C++ есть новее и удобнее..

какие функции?

NEOn
17.12.2005, 14:24
какие функции?
старые - printf и scanf.. А новые: cout и cin.

трава
19.12.2005, 15:04
NEOn, в чем разница? И в С их можно использовать?

NEOn
19.12.2005, 20:07
NEOn, в чем разница? И в С их можно использовать?
В С++ можно использовать и то, и другое, хотя предпочтительнее cout << var; и cin >> var; (вместо cin и cout могут быть свои переменные, например, файлы.. Вообще, cin - это стандартный ввод, cout - вывод... а << - присвоение..)
В C - только printf и scanf...

У << проще синтаксис просто...

AlphaOmega
21.01.2006, 00:18
azalio, а зачем вообще использовать printf функцию? Она, насколько я знаю, чаще всего используется либо во внутренних процессах либо для вывода информации на экран в 16-битных приложениях.
Не проще ли работать с переменными типа char, AnsiString и String?

Sranger
29.03.2006, 20:36
народ помогите. как из фаийла считать текст ?

AlphaOmega
30.03.2006, 18:13
Вот что я когда-то (в период ознакомления с языком) для себя сохранил:

// 4 примера
// --------------------------------------------------
#include <fstream.h>
// --------------------------------------------------
// пример 1...
// читает файл test.dat с содержанием: слово и цифра
// через пробел или знак перевода на следующую строку
// придавая символьной переменной TEXT значение слова,
// а цифровой переменной NUMBER значение цифры...;-)
char TEXT[8888];
int NUMBER;
ifstream file;
file.open("test.dat");
file >> TEXT >> NUMBER;
file.close();
// --------------------------------------------------
// пример 2...
// читает файл test.dat и выводит сообщение c текстом
// только первой строки
{
char buff[81];
ifstream infile("test.dat");
infile.getline(buff, sizeof(buff));
Application->MessageBox(buff , "TITLE", MB_OK);
infile.close();
}
// --------------------------------------------------
// пример 3...
// читает файл test.dat и выводит сообщения с текстом
// каждой строки поочереди
{
char buff[81];
ifstream infile("test.dat");
while (!infile.eof())
{
infile.getline(buff, sizeof(buff));
Application->MessageBox(buff , "TITLE", MB_OK);
}
infile.close();
}
// --------------------------------------------------
// пример 4...
// читает файл test.dat и выводит всё его содержимое
// в строки объекта Memo1
ifstream file;
file.open("test.dat");
if (!file) return;
char str[80];
while (!file.eof())
{
file.getline(str, sizeof(str));
Memo1->Lines->Add(str);
}
file.close();

А вот ещё один более простой способ:

Memo1->Lines->LoadFromFile("preved.txt");

strelok
02.05.2006, 21:20
В С++ можно использовать и то, и другое, хотя предпочтительнее cout << var; и cin >> var; (вместо cin и cout могут быть свои переменные, например, файлы.. Вообще, cin - это стандартный ввод, cout - вывод... а << - присвоение..)
В C - только printf и scanf...

У << проще синтаксис просто...
Прошу прощения, что вмешиваюсь но попробуйте использовать cout в одной программе с, например, функцией Sleep... Ощущения незабываемые.. Можно конечно делать что-то типа cout<<flush<<var<<flush, но я предпочитаю printf..
Аналогично с cin..

NEOn
03.05.2006, 12:30
Прошу прощения, что вмешиваюсь но попробуйте использовать cout в одной программе с, например, функцией Sleep... Ощущения незабываемые.. Можно конечно делать что-то типа cout<<flush<<var<<flush, но я предпочитаю printf..
Аналогично с cin..
Ну это дело личных предпочтений и вкуса. Сделать можно любым способом. Мне лично cin, cout кажутся более логичными и простыми в использовании.

Litoven
04.09.2006, 08:04
Вопрос никто случано не знает книг Win 32 по программированию, написанных как руководство по С Straustrup'а.

добавлено через 5 минут
А кстати есть идеи, каким образом обратно декомпилировать, из программы в исходники, функции сохранения ???:confused:

Kostyan
04.09.2006, 23:59
Вопрос никто случано не знает книг Win 32 по программированию, написанных как руководство по С Straustrup'а.

Элджер - C++ библиотека программиста (1,8 Мб) скачать (http://int3.net/ex-book/Alger/Alger_C++.zip)

Петзолд - Программирование под Windows 95. Том I (4,2 Мб) скачать (http://int3.net/ex-book/Petzold/petzold_p1.zip)

Петзолд - Программирование под Windows 95. Том II (4,0 Мб) скачать (http://int3.net/ex-book/Petzold/petzold_p2.zip)

Румянцев - Азбука программирования в Win32Api (10,7 Мб) скачать (http://int3.net/ex-book/Rumianzev/rumiantzev_p1.zip)

Румянцев - Работа с файлами в Win32Api (12,5 Мб) скачать (http://int3.net/ex-book/Rumianzev/rumiantzev_p2.zip)

Джефф Элджер - C++ Библиотека программиста (1,74 Мб) скачать (http://it-books.narod.ru/C_CPP/CppForRealProgrammers_rus.rar)

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

источник gamedev.ru

cheiwe
04.11.2006, 16:40
А есть книги, наподобии справочника со списком всех используемых команд и т.п. ?

Kostyan
04.11.2006, 17:40
А есть книги, наподобии справочника со списком всех используемых команд и т.п. ?

Что именно ты имеешь ввиду под "командами" ? Если операторы языка, то подойдет любой учебник (взять хотя бы того же Бьярна Страустрапа или Герберта Шилдта), если, допустим, справочник по API функциям, то это уже к господам из майкрософт, на онлайн (http://msdn.microsoft.com/library/default.asp) справочник по MSDN. Или имеется ввиду что то другое...?

Страустрапа к примеру можно взять хотя бы отсюда (http://www.books.kulichki.ru/index.php?book=c)

Vadya corp.
05.11.2006, 13:03
Kostyan Он имеет ввиду .chm файлик, наподобие тех, которые есть на php.net (разумеется там только php chm)

cheiwe
09.11.2006, 23:01
Не это я имел ввиду, а полный листинг операторов, функций и т.п. Типа памятка...:)
Я только начал читать книжки по программированию(вообще я дизайнер) и могу ошибаться в названиях, вы уж не серчайте...

Rocker_dead
18.11.2006, 19:22
:-D Как раз printf и scanf устаревшие! )
Ага, молодец, хвалю!


Я только начал читать книжки по программированию(вообще я дизайнер) и могу ошибаться в названиях, вы уж не серчайте...
Раз ты дизайнер, то может те лучше приобрести книгу Архангельского, в котором сразу идёт визуальное программирование (не боись, сам язык тож есть - книга БОЛЬШАЯ). Вот те ссылка на компьютерную версию:
Скачать А.Я. Архангельский C++ Builder 6 (http://qiq.ru/to/_http://rapidshare.de/files/6360741/Arhangelckiy_BCB6.zip.html)

cheiwe
18.11.2006, 20:37
Очень тебе благодарен! Я кстати подобного ещё не находил....
К несчастию я не очень хорошо воспринимаю книги с монитора, буду искать печатное издание, но пока попользуюсь твоим предложением... А ты её в продаже сам видел? Можешь подскозать где?

Ещё раз спасибо.

cheiwe добавил 18.11.2006 в 20:40
А подскажите, какую среду разработки лучше использовать
MS Visual Studio или Borland Developer Studio (если не ошибся в написании). Есть и то и то, но что ставить не знаю....

cheiwe добавил 18.11.2006 в 20:45
.....посмотрел. Извини, а ты ничего не перепутал. На первый взгляд с визуальное программирование никак не связано....или я ошибаюсь по незнанию? Прости, если это так.:D

Rocker_dead
18.11.2006, 20:49
cheiwe, в продаже есть, почти везде, например, в молодой гвардии на Полянке. В твёрдом переплёте рублей 600 наврено, в мягком - около 450 (там около 1000 стр.).
Смотря что ты хочешь программить. Я юзаю Borland, т.к. на моём уровне студента плюсы Visual Studio абсолютно не нужны, они понадобятся лишь при программировании серьёзных проектов (ну это я на простом уровне сказал).

cheiwe
18.11.2006, 22:14
В том-то и дело, что я пока этих тонкостей и различий не знаю.... А что за уровень у тебя такой "студент"? :D Что ты уже программировал?

Rocker_dead
18.11.2006, 22:26
cheiwe, ничё серьёзного,восновном тока лабы по нашим предметам, ща делаю калкулятор (поначалу смешно, но когда я увидел калькуляторы других студентов, впал в ужас). Пока есть тока простые операции, но никаких багов:) Просто пока не могу программированию уделять много времени, хотя много чё уже знаю.

cheiwe
18.11.2006, 22:55
я просто давно уже хотел с кем-нить посотрудничать, ну в плане GUI дизайн там нарисовать для программки какой, иконки и т.п. Бесплатно, естественно... :)

Kostyan
19.11.2006, 00:44
в плане GUI дизайн там нарисовать для программки какой, иконки и т.п.

Я думаю пока не с кем =)
Кто бы писал красивое оформление.... лично если я и пишу что то (а это крайне редко), то чисто консоль или вообще просто без всякого взаимодействия с юзером...

cheiwe
19.11.2006, 13:06
Я думаю пока не с кем =)
Кто бы писал красивое оформление.... лично если я и пишу что то (а это крайне редко), то чисто консоль или вообще просто без всякого взаимодействия с юзером...

У, как ты жесток к пользователю!!! :D

Rocker_dead
19.11.2006, 13:37
cheiwe, да он трояны пишет, зачем ему интерфейс делать?))))
ОФФ: Типа выскакивает окошко и написано: "отправить все ваши пароли автору сей программы?" и кнопка Ок тока:D

Kostyan
19.11.2006, 14:22
cheiwe, Rocker_dead, эээ.... что за обвинения? Какие еще трояны? Может я новые драйвера для nVidia разрабатываю.... заканчивайте.

Rocker_dead
19.11.2006, 14:23
Kostyan, да лан те, прям пошутить нельзя)) А на чём и подо что дрова?

Kostyan
19.11.2006, 14:26
Rocker_dead, я ж говорю, может 8-)

cheiwe
19.11.2006, 22:24
Rocker_dead, я ж говорю, может 8-)

.....а может и нет? Само собой напрашивается.:D

poneg
30.11.2006, 12:07
я просто давно уже хотел с кем-нить посотрудничать, ну в плане GUI дизайн там нарисовать для программки какой, иконки и т.п. Бесплатно, естественно...
Хммм, это как - ты хочешь для кого-то дизайн или наоборот - кто-то для тебя?:)

з.ы. просто мне надо для одной программки дизайн сделать более-менее приличный, а времени постоянно не хватает:( если че - в личку плиз

aus_gift
08.01.2007, 10:55
Пример из книги "Полный справочник по С++" 4-ое издание, Герберт Шилдт:


#include <iostream>
#include <cstring>
using namespace std;

class phonebook {
public:
char name[80];
int areacode;
int prefix;
int num;
phonebook(char *n, int a, int p, int nm)
{
strcpy(name, n);
areacode = a;
prefix = p;
num = nm;
}
};

// Display name and phone number.
ostream &operator<<(ostream &stream, phonebook o)
{
stream << o.name << " ";
stream << "(" << o.areacode << ") ";
stream << o.prefix << "-" << o.num << "\n";

return stream; // must return stream
}

int main()
{
phonebook a("Ted", 111, 555, 1234);
phonebook b("Alice", 312, 555, 5768);
phonebook c("Tom", 212, 555, 9991);

cout << a << b << c;

return 0;
}

.....

Kostyan
14.04.2007, 16:19
Может кто нить сможет разрешить маленький нюанс. Дело в следующем: апишная функция GetModuleFileName получает во втором параметре указатель на строковый буфер, в котором возвращает полное имя файла (полное, т.е. типа "C:\mydir\my_subdir\filename.exe"), которое собсна мне и не требуется. Мне необходимо из этой строки взять тольно непосредственно имя файла (filename.exe). Каким образом это можно было бы реализовать? Я сделал следующим образом, но как то криво мне кажецца. Отматывал указателем с конца строки до первого бекслеша и копировал дальше в буффер:

GetModuleFileName(NULL,&NameBuffer[0],MAX_PATH);
DWORD StringLenght=lstrlen(&NameBuffer[0]);

char* lpNameBuffer=&NameBuffer[StringLenght-1];
do{
--lpNameBuffer;
}while(*lpNameBuffer!='\x5C');

char* lpShortName=ShortName;
do{
++lpNameBuffer;
*lpShortName = *lpNameBuffer;
++lpShortName;
}while(*lpNameBuffer!='\0');

printf("ShortName: %s\n",&ShortName[0]);

Может есть другой способ?

ЗЫ функцию fnsplit() не предлагать =)

elkozlova
20.10.2007, 16:44
А чем тебе не нравится этот способ?

AnarCky
02.01.2008, 14:24
дело в том, что cout это объект пространства имен std и его использование делает акцент на Объектно-Ориентированном Программировании, а поскольку С++, в отличии от С, задумывался как ОО язык, то и ясно, что именно про cout писать будут.

Kostyan
05.01.2008, 13:08
Блин, юзайте prinft(...), нормальная функция форматированного вывода... но суть вопроса не в этом, собсно говоря.

Подскажите, если кто знает, что за технология такая хитрая, LSP (Layered Service Provider), это из серии "снифферы". Сниффер на сырых сокетах хватает только входящие пакеты, мне же надо бы и исходящие поймать. На всех форумах рекомендуют либо NDIS драйвер либо вот именно эту технологию... а описания что то нигде найти не могу, даже в MSDN как то все плохо. Кто нибуть что нибуть знает? =)

PS сорри, уже не надо думаю =) мелкомяхкие вроде рассматривают такой вопрос (http://www.microsoft.com/msj/0599/LayeredService/LayeredService.aspx), надо учить англицкий.

Alraminar
24.01.2008, 21:00
когда мы начали изучать С у нас возник вопрос какой Х.. это придумал и что он курил... так изощриться нормальный человек не мог...

Rocker_dead
01.06.2008, 14:48
Добрый день =) Такая ситуация:
На работе нужно программить порты, и мне сказали это делать под ДОСом, в Турбо С. cout и cin не пашут (от чего - понимаю, но это не важно), юзаю scanf и printf. Так вот, при выводе массива символов (допустим "1001110011") программа некоторые единицы заменяет на "(null)". Никто не подскажет, чё это за лажа такая?(

Kostyan
03.06.2008, 16:34
Rocker_dead, ты бы хоть сорцы выложил. Или фрагмент с функцией.

Rocker_dead
03.06.2008, 17:11
Kostyan

#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
int a[16], z[16];
int i, j;
char m, str[9], mark[9]="01111111";
printf("Vvedite bite-marker \n");
scanf("%s", str);
if (strcmp(mark,str))
printf("ERROR");
else
printf("Vvedenniy bite marker verniy - 0x7f \n Vipolnit' poisk?");
m=getch();
printf("%c", m);
if (m=='y')
printf("Vvedite massiv is 16 znakov \n");
for (i=0;i<16;i++)
{scanf("%d", a[i]); printf("\n");
for (i=0;i<16;i++)
printf("%d", a[i], " ");
/*Searching*/
for (i=0;i<9;i++)
{
if (a[i]==0 && a[i+1]==1 && a[i+2]==1 && a[i+3]==1 && a[i+4]==1 && a[i+5]==1 && a[i+6]==1 && a[i+7]==1)
{z[i]=a[i]; z[i+1]=a[i+1]; z[i+2]=a[i+2]; z[i+3]=a[i+3]; z[i+4]=a[i+4]; z[i+5]=a[i+5]; z[i+6]=a[i+6]; z[i+7]=a[i+7]; i=i+8;}
else
z[i]=0;
}
for (j=9;j<16;j++)
{z[j]=0;}
printf("\n");
for (i=0;i<16;i++)
{printf("%d", z[i], " ");}
getch();
}return 0;}

Kostyan
12.06.2008, 09:36
Rocker_dead, если честно, посмотрел я сорец и чегото плохо его осилил... обратил внимание на явные баги (трудно мимо пройти), но смысл алгоритма не очень... пить закончу, потом может разберусь...

Rocker_dead
15.06.2008, 17:40
Kostyan, укажи тогда хоть на баги

Kostyan
22.06.2008, 14:09
Rocker_dead,баги может и не совсем баги, а так, недочеты, но...
рассмотрим исходник:

1.
char m, str[9], mark[9]="01111111";
printf("Vvedite bite-marker \n");
scanf("%s", str);

if (strcmp(mark,str))
printf("ERROR");
else
printf("Vvedenniy bite marker verniy - 0x7f \n Vipolnit' poisk?");


не совсем понятный фрагмент. Здесь программа просит ввести бит маркер, затем сравнивает его с эталонным (0х7F) и если введен неправильный маркер выдается ошибка. Тогда я не понимаю, какой вообще смысл запрашивать его у пользователя? Не проще ли зашить его жестко в программу? Потом, здесь же, если введенный бит маркер неверен, программа просто выбросит еррор и... продолжит выполняться дальше. Разве что мы не увидим приглашение о поиске.
И кстати, дальше в программе ты в цикле проверяешь какие то данные с этим бит маркером, жестко зашитим жестко в проге.

2.
if (m=='y') printf("Vvedite massiv is 16 znakov \n");

следующий фрагмент. Мы проверяем ответ пользователя (y/n) и если у, то выводим сообщение на экран и все. программа опять же продолжит выполняться в том же направлении. Тогда смысл подобной проверки?

Касательно двух вышеприведенных фрагментов я так понимаю, что ты решил не злоупотреблять фигурными скобками и переусердствовал?


3.
for (i=0;i<16;i++)
{
scanf("%d", a[i]);
printf("\n");
for (i=0;i<16;i++) printf("%d", a[i], " ");
/*Searching*/
for (i=0;i<9;i++)
{
if (a[i]==0 && a[i+1]==1 && a[i+2]==1 && a[i+3]==1 && a[i+4]==1 && a[i+5]==1 && a[i+6]==1 && a[i+7]==1)
{
z[i]=a[i];
z[i+1]=a[i+1];
z[i+2]=a[i+2];
z[i+3]=a[i+3];
z[i+4]=a[i+4];
z[i+5]=a[i+5];
z[i+6]=a[i+6];
z[i+7]=a[i+7];
i=i+8;
}
else
z[i]=0;
}
for (j=9;j<16;j++)
{
z[j]=0;
}
printf("\n");
for (i=0;i<16;i++)
{
printf("%d", z[i], " ");
}
getch();
}

насчет этого фрагмента. Тут чего то я вообще запутался, равно как и мой отладчик. Вложенные циклы и все такое. Ты используешь переменную i для основного цикла, потом ее же используешь для вложенного. Ладно, это ерунда, так можно делать, но ты не учел, что после первого же вложенного циклапеременная у тебя принимает последнее значение, т.е. 16...


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


ЗЫ а сегодня день траура... 22 июна в 4 часа утра 1941 года началось вторжение немецких войск на территорию СССР... если кто помнит

Rocker_dead
23.06.2008, 22:25
Kostyan, во-первых - спасибо тебе большое за то, что откликнулся.

сегодня день траура...
Да, помним...

Тогда я не понимаю, какой вообще смысл запрашивать его у пользователя?Это просто так, для наглядности, программа не работает на какой то эффект.
расскажи хоть алгоритм для начала, там бы подумали...После прохождения проверки маркера на вход программы (теоретически с порта) идёт последовательность 0 и 1. и нужно определить наличие в ней этого маркера и вывести эту последовательность, оставив единицы тока этого бит-маркера, а остальное заполнить нулями

Kostyan
27.06.2008, 01:38
Rocker_dead, все, кажется вкурил. Тогда сдается неправильно реализовал идею.. хотя бы тут:

if (a[i]==0 && a[i+1]==1 && a[i+2]==1 && a[i+3]==1 && a[i+4]==1 && a[i+5]==1 && a[i+6]==1 && a[i+7]==1)

ты здесь случайно не путаешь байты и биты?

я тут прикинул пару вариантов, посмотри, может чем то поможет.
1. банально посимвольное сравнение (даем проге символ, он сравнивается со всеми вытекающими.. ):
#include <stdio.h>
#include <conio.h>

int main()
{
int symbol=0;
int bit_marker = 0x7F; // 0x01111111b
printf("start: \n");
for(;;)
{
symbol = getch();
if(symbol==bit_marker)
{
printf("symbol found: %02X\n",symbol);
}
else
{
symbol=0;
printf("symbol: %02X\n",symbol);
}
}
return 0;
}


2. тут в принципе тоже самое, только эмулируется битовый последовательный поток:
#include <stdio.h>
#include <conio.h>

void main()
{
unsigned char bit,data=0,out=0;
int bit_marker = 0x7F;
printf("start: \n");
for(;;)
{
bit = getch();
if(bit==0x31 || bit ==0x30)
{
bit &= 0x01;
data <<= 1;
data &= 0xFE;
data |= bit;
if(data == bit_marker)
{
printf("\nbit_marker found!\n");
out = data;
} else out = 0;
printf("%02X ",out);
}
}
}

да, кстати, забываю спросить. А что это за вторые кавычки после переменной в аргументах?

printf("%d", a[i], " ");