Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 338
от 02.03.2006, 10:09

Администратор:Калашников О.А.
В рассылке:Подписчиков: 259, Экспертов: 52
В номере:Вопросов: 5, Ответов: 10


Вопрос № 36083: Привет... У меня следующий вопрос: Пишу программму на С (под Linux), программа консольная, и при разных аргументах должна вести себя по разному...так вот, ни как не пойму как работать с argv[] функции main. Подскажите как например будет выгля...
Вопрос № 36095: Привет... Как передать в функцию аргументы argc и argv[] функции main в другую функцию...просто я делаю...и ниче не работает...код в приложении... Объясните мне дураку...ну как работать с argv[]... И еще КАК МОЖНО ПОЧИСТИТЬ ЭКРАН ????????...
Вопрос № 36102: Здравствуте уважаемые эксперты! Подскажите пожалуйста, как можно реализовать поиск в Memo....
Вопрос № 36107: Приветствую, эксперты! ВижлСи++ 6. Как можно программно удалить папку на диске с потрохами? Т.е. внутри есть файлы и вложенные папки... Неужто по одному все удалять?...
Вопрос № 36113: Ув. эксперты. Возникла проблема с stl (код внизу). Просто идиотизм какой-то! Это как-нибудь лечится? Среда - Visual Studio 2002....

Вопрос № 36.083
Привет...
У меня следующий вопрос:
Пишу программму на С (под Linux), программа консольная, и при разных аргументах должна вести себя по разному...так вот, ни как не пойму как работать с argv[] функции main. Подскажите как например будет выглядеть условие если второй аргумент ==третьему аргументу, то выйти...ну вобщем какоё нибудь пример по работе с аргументами...
И еще один вопрос: при вызове программы должен выводиться текст из фала:) ...как сделать чтобы перед этим зачищался экран???(а то мне приходится хитрить и считывать ничего размером в экран... с файла:))
Отправлен: 24.02.2006, 13:19
Вопрос задал: Denton (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Muad Dib
Здравствуйте, Denton!
По поводу аргументов командной строки:

if (argc > 1) {
int i;
for (i = 1; i< argc; ++i)
printf(" %s ", argv[i]);
}

Но как вы заметили большинство консольных программ используют достаточно сложный синтаксис с указанием разных опций, чтобы не проводить синтаксического разбора, используется функция getopt_long() соотвественный заголовочный файл - getopt.h. man-страница там подробная, с примерами - цитировать не буду.

Ответ отправил: Muad Dib (статус: 5-ый класс)
Отправлен: 24.02.2006, 13:43

Отвечает: EPDSota
Здравствуйте, Denton!

1. Условие будет выглядеть:
if( strcmp(argv[2],argv[3]) )exit(23);

Приложение:

---------
Открыть глаза навстречу солнцу

Ответ отправил: EPDSota (статус: Практикант)
Отправлен: 24.02.2006, 13:46

Отвечает: Mamont0001
Здравствуйте, Denton!

Чистить экран - clrscr(); / cleardevice(); / clearviewport();

Остальное во вложении.

Приложение:

---------
Сон — это маленькая смерть

Ответ отправил: Mamont0001 (статус: 2-ой класс)
Отправлен: 24.02.2006, 20:05
Оценка за ответ: 5


Вопрос № 36.095
Привет...
Как передать в функцию аргументы argc и argv[] функции main в другую функцию...просто я делаю...и ниче не работает...код в приложении...
Объясните мне дураку...ну как работать с argv[]...
И еще КАК МОЖНО ПОЧИСТИТЬ ЭКРАН ??????????? ну должна же быть какая-то библиотчечная функция что-ли...раз уж в bash и в dos есть clean и cls :)

использовал mc+gcc

Приложение:

Отправлен: 24.02.2006, 18:13
Вопрос задал: Denton (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Muad Dib
Здравствуйте, Denton!
Берете любую книгу по С/С++ и смотрите как передавать массивы в функции. То что вы программируете под Линукс не освобождает от знания языка С++ как такового.

a1=&argv[1]; //и почему тут компилятор недоволен?
a2=&argv[2];//ну и тут то же

а что вы пытаетесь делать? Вы передаете функции указатель на массив - вернее указатель на первый элемент массива, для того чтобы вычислить argv[1] (первый элемент массива) к примеру вам нужно к указателю - указывающему на первый элемент, прибавить размер самого элемента.

Есть очень хороший бук: Хрестомания по программирования на С в UNIX на lib.ru например, там эти вещи оччень доступно разобраны. Не слушайте готовых решений - попытаейтесь разобраться сами.
Ответ отправил: Muad Dib (статус: 5-ый класс)
Отправлен: 24.02.2006, 18:42
Оценка за ответ: 5
Комментарий оценки:
Полностью согласен...написал фигню...спасиба...

Отвечает: estiGi
Здравствуйте, Denton!
Вас уже поругали, поэтому я не буду :) Значит, с двумерными массивами разобрались :)
А очистить экран в консоли - есть такая функция, system. Кажись она все это умеет и выполняет консольные команды. Например:
system ("cls");
Ответ отправил: estiGi (статус: Студент)
Отправлен: 24.02.2006, 19:15
Оценка за ответ: 4


Вопрос № 36.102
Здравствуте уважаемые эксперты!
Подскажите пожалуйста, как можно реализовать поиск в Memo.
Отправлен: 24.02.2006, 18:56
Вопрос задал: Евгений (jeni) (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Muad Dib
Здравствуйте, Евгений (jeni)!
> Подскажите пожалуйста, как можно реализовать поиск в Memo.

Содержание Memo->Lines в строку и использовать search, если в Memo->Lines нет Search.

Либо же реализовать процедуру поиска самостоятельно - тогда Кнут тебе помощь.
Ответ отправил: Muad Dib (статус: 5-ый класс)
Отправлен: 24.02.2006, 19:14

Отвечает: Mamont0001
Здравствуйте, Евгений (jeni)!

Borland C++ Builder 6.0

Смотреть вложение.

Приложение:

---------
Сон — это маленькая смерть

Ответ отправил: Mamont0001 (статус: 2-ой класс)
Отправлен: 24.02.2006, 19:56


Вопрос № 36.107
Приветствую, эксперты!

ВижлСи++ 6.
Как можно программно удалить папку на диске с потрохами? Т.е. внутри есть файлы и вложенные папки... Неужто по одному все удалять?
Отправлен: 24.02.2006, 19:48
Вопрос задал: Zitz (статус: 7-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: DoubleV
Здравствуйте, Zitz!
Нет можно сразу. Только не всегда срабатывает.

#include <windows.h>
#include <shellapi.h>

void main()
{

SHFILEOPSTRUCT shFile;
shFile.hwnd=0;
shFile.wFunc=FO_DELETE;
shFile.pFrom="C:\Новая папка (2)";
shFile.fFlags= FOF_NOCONFIRMATION;
shFile.pTo=0;
shFile.lpszProgressTitle=0;
shFile.fAnyOperationsAborted=0;
shFile.hNameMappings=0;

int i=::SHFileOperation(&shFile);
}

В папке C:\Новая папка (2) были еще паки и файлы в этих файлах. Удалилось все.
Ответ отправил: DoubleV (статус: 3-ий класс)
Отправлен: 24.02.2006, 23:20
Оценка за ответ: 5
Комментарий оценки:
В МСДН по этому поводу загадочно так написано:

When used to delete a file, SHFileOperation will attempt to place the deleted file in the Recycle Bin. If you wish to delete a file and guarantee that it will not be placed in the Recycle Bin, use DeleteFile.

Я попробывал вроде работает... Напиши пожалуйста в личку при каких условиях не срабатывает.
А удалять мне надо файлы и папки мною же программно созданные.


Вопрос № 36.113
Ув. эксперты. Возникла проблема с stl (код внизу). Просто идиотизм какой-то! Это как-нибудь лечится? Среда - Visual Studio 2002.

Приложение:

Отправлен: 24.02.2006, 20:32
Вопрос задал: Огурцов Павел Евгеньевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: DoubleV
Здравствуйте, Огурцов Павел Евгеньевич!
Ошибок тут нет, просто надо указать в getline каким символом заканчивать строку.

#include <windows.h>
#include <string>
#include <iostream>
using namespace std;
void main()
{
int num;
string s;
cin >> num;
getline(cin, s,'5');//После ввода '5' ввод закончится
}
p.s если не ввести '5', то enter будет переходить на новую строку и продолжать ввод
Ответ отправил: DoubleV (статус: 3-ий класс)
Отправлен: 24.02.2006, 22:37
Оценка за ответ: 4

Отвечает: Ataman N. N.
Здравствуйте, Огурцов Павел Евгеньевич!
Так напишите cin >> num >> s;
Ответ отправил: Ataman N. N. (статус: 8-ой класс)
Отправлен: 27.02.2006, 11:57


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.16 от 01.03.2006
Яндекс Rambler's Top100

В избранное