Здравствуйте, уважаемые!
Помогите пож. разобраться с проблемой. Изучаю С++, прочитал об обработке исключений и о работе с аргументами проги при вызове ее из ком. строки. Так вот,
прочел и решил набросать обобщающий примерчик. В качестве задания выбрал банальное нахождение максимального эл-та матрицы.
Чтобы кратко и конкретно:
Найти максимум в матрице, размер которой задается, при вызове программы из ком. строки, в качестве аргументов.
При получении количесва аргументов не равного двум вывести сообщ. об ошибке и завершить программу.
В противном случае вывести значение максимума и его «координаты».
Я тут текст проги скинул… весь… не настолько я еще в С++ разбираюсь, чтобы понять в каком куске ошибка (собственно для этого и пишу).
Да, кстати, если размер задавать с терминала в процессе работы проги (типа: cout<<"Enter a: \n»; ) то работает.
cin>>cols;
cout<<"Enter b: \n»;
cin>>raws;
/* Looking for max element in matrix */
# include
# include
# include
using namespace std;
int main(int argc, char* argv[])
{
try
{
if(argc>=2)
throw «Too many arguments. Should be 2.\n»;
else if(argc==1)
throw «Too few arguments. Should be 2.\n»;
//————— all is OK ——————-
int cols, raws;
cols=atoi(argv[2]);
raws=atoi(argv[3]);
int matrix[cols+1][raws+1];
for(int i=0; i<=cols; i++)
{
for(int j=0; j<=raws; j++)
matrix[j]=j;
}
cout<<"Press any key to calculate.\n»;
getch();
int max=0;
int max_i, max_j;
for(int i=0; i<=cols; i++)
{
for(int j=0; j<=raws; j++)
{
if(matrix[j]>max)
{
max=matrix[j];
max_i=i;
max_j=j;
}
}
}
cout<<«\n»<<«————————--\n»
<<"Max element in matrix:\n»
<<max_i<<«,»<<max_j<<» = «<<max;
return 0;
} //-- try
//—————— if have trouble ——————--
catch(const char* er_msg)
{
cout<<"Error: «<<er_msg;
return 1;
}
}
компилил так:
g++ ./my1.cpp
Сообщения об ошибках:
home/fatboy/tmp/ccfneBYK.o(.text+0×123): In function `main’:
: undefined reference to `stdscr'
/home/fatboy/tmp/ccfneBYK.o(.text+0×128): In function `main’:
: undefined reference to `wgetch'
collect2: ld returned 1 exit status
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Флаги компиляции -lncurses или -lcurses в BSD.
P.S. C++ тут ни при чем — исключение должно работать.
1. На фига тебе curses? Для getch()? Замени на
char q;
cin >> q;
и убери curses хедер на фиг.
2. Пользуй iostream, а не iostream.h
3. if(argc>=2) <— Ты уверен? :-)
throw «Too many arguments. Should be 2.\n»;
else if(argc==1)
throw «Too few arguments. Should be 2.\n»;
Good Luck,
UT
а тут кто проверки будет делать на неправильные (нечисловые, неположительные) значения аргументов. понимаю, конечно, что «для собственного использования», но и это надо учитывать. ;) а то мало ли в каком состоянии прогу тестить будешь ;)
1. if (argc>=2) тут, конечно, протупил :)
2. А какая разница как хидер использовать: iostream или iostream.h ?
И еще один момент забыл, просто ради общего развития: как я понял виной всему curses…
Почему?
Вопрос по-моему довольно общий если нет желания можно не отвечать — не настаиваю :))
ANSI говорит использовать #include
Да, вопрос общий. curses ничему не виной, просто ты неверно используешь систему хедер + линкованная библиотека. В хедере декларируются функции, библиотеками они загружаются. Изучи этот вопрос. Вкратце, либо ты включаешь хедер curses И линкуешь объектный модуль с libncurses (libcurses), либо ты обходишься без них, поскольку они тебе, по большому счету, и не нужны.
Кстати, к обчеству. Я так понимаю, в русском языке принято произношение «хидер»? Забавно, поскольку в английском оригинале он «хедер», от «хед» — «голова». Ну, типа, заголовок. Дифтонг «ea» читается как «Э» также в «bread и spread». Что еще забавнее, это «flood», который народ упорно пишет как «флуд». Но ведь он же «флад», как «blood» = «блад»…
Good Luck,
UT
Однако: heat[hi:t] — т.е. «хиит»
heap[hi:p] — т.е. «хиип»
Но это уже флейм :)
Но heart = «харт»… :-)
В инглише, несмотря на то, чему учат в школах, практически нет правил произношения. Каждое слово пришло в этот синтетический язык со своим произношением и даже часто сос воей грамматикой (если грамматика была уж совсем уродской с точки зрения англосаксов, то слово стало неизменяемым, как cut, put и т.д).
И собстно, почему флейм? Обычно, народ, который интересуется программированием, находит лингвистические приколы забавными. Сходный стиль мышления.
Good Luck,
UT
А я вот хотел «иа» в слове «theater» напомнить, поэтому вопрос: кто как передает «th» по-русски?
да нет, общие части всё же есть, а исключений — не так уж и много.
'ea' в зависимости от открытости/закрытости слога и звонкости последующего соглачного читается вполне по правилам ;)
это я помню.. потому как системой синтеза увлекался ;)
куда в этом плане страшнее русский. ууууу.
почти каждое слово сейчас произносится по индивидуальному правилу….
а тут и не дифтонг ;)
Ну да.. и book, food, foot, loop — они тож как blood читаются? :))))
Ага. разница — в 'l’.
Точнее в двубуквии согласная + 'l’. (и действительно, читается как flood…)
ну а th… да фик его знает. как звучит, так и читается..