Вернуться   Развлекательный портал CN.ru - Форум > Технологии > Программирование > Начинающим

Ответ
 
Опции темы
Старый 06.07.2007, 22:23 ↑ #61
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

Цитата:
где менять эти настройки?
надо поискать по главному меню, раз такая настройка была в вижуал студии, значит и в билдере должна быть. Это где-то рядом с тем местом, где настраивается синтаксическая раскраска текста. Попробовать сделать шрифт
"terminal" или "... console" их немного, но они есть в системе, у которых выбирается кодовая страница "oem/dos". Должен сразу грубо и зримо помменяться вид букв в окнах с исходными текстами файлов проекта. Если
мой покуроченный курьер не приживётся - не беда, "терминал" не намного хуже. Главная бяка - с вводом текста, он вводится по-прежнему в кодировке windows-1251, из-за этого все строковые константы в программу надо вбивать в фар менеджере, в режиме "дос". А потом, когда программа уже выполняется - та же беда с вводом русских букв. Как сами мелкомягкие программисты обходились с консольными программами, ума не приложу, ведь работают они у них нормально. Неужели каждый пользовательский ввод переводят? Надо курить хелповники до полного просветления.

Про dos.h можно забыть. Надо искать в хелповнике аналоги "более тридцатидвухразрядных" функций, какой-нибудь sleep() или что другое в этом духе.
__________________

Дышите думайте глубже, вы взволнованы умны.
Hogofogo вне форума   Ответить с цитированием
Старый 10.07.2007, 18:02 ↑ #62
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

в опциях редактора на вкладке Display есть элемент Editor Font, ставил различные шрифты,в том числе и рекомендованные. В самом редакторе шрифт менялся, но при выводе вместо "привет" - "яЁштхЭ" как и обычно. Кстати терминал в отличие (или отличиИ?) от других шрифтов в РЕДАКТОРЕ вместо русских букв каракули выдавал.
sleep меня тоже озадачил. Нет, программа конечно работает, только оказывается есть Sleep () ( от <winbase.h>) и sleep () (не знаю какой заголовочный файл), а чем они отличаются для меня осталось загадкой...
Б.Спасибо за подсказку!
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 10.07.2007, 21:52 ↑ #63
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

Надо учитывать, что текст констант на русском языке набивать надо не в билдере, а где-то в посторонней программе, которая понимает досовскую кодировку и при изображении, и при вводе с клавиатуры. Замена шрифта позволяет только корректно читать текст, а чтобы вводить с клавы, нужно что-то ещё.

Интересно, вот есть в сети всякие уроки

http://ruseti.ru/book1/Chapter%202/index.htm

и на русском языке вроде,
а программу "hello world" преподают чисто англоязычную и данный вопрос изящно обходят.

Про sleep() - это вообще-то функция из набора совместимости POSIX, то есть для юниксов, заголовок живёт в файле unistd.h
Если в системе есть такой файл ( может быть в наличии и в windows),
то функцию можно использовать, правда у этой функции аргумент - целое число и задаёт время неактивности в секундах. Возможно, в хелповнике про эту функцию есть примечание "see also" с родственными функциями более полезными для конкретного случая.

-----------------------------

Во, книжечку нарыл, там решение проблемы приводится - ну очень изящное

http://www.ict.edu.ru/ft/004246/cpp_p1.pdf

страница 16
__________________

Дышите думайте глубже, вы взволнованы умны.

Последний раз редактировалось Hogofogo; 10.07.2007 в 22:16.
Hogofogo вне форума   Ответить с цитированием
Старый 10.07.2007, 22:21 ↑ #64
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

Возможно, вы встретитесь со следующими проблемами:
1) В окне программы вместо русских букв выводятся какие-то странные символы.
Эта проблема объясняется различием таблиц кодировок Windows и DOS. В этих таблицах
русские буквы расположены в разных местах. Консольные программы при работе исполь-
зуют кодировку DOS, а текстовый редактор Visual C++ – кодировку Windows. Поэтому
вам придется добавить преобразование строк с русскими буквами из кодировки Windows
в кодировку DOS.
Для этого включите в программу, после файла iostream.h, файл windows.h с описа-
нием функций операционной системы Windows:
#include <windows.h>
Перед функцией main() создайте новую функцию с именем rus_str(), которая будет вы-
полнять необходимое преобразование с помощью специальной функции Windows:
char* rus_str( char* str )
{CharToOem( str, str );
return str;
}
Во всех строках программы, где на экран выдаются символьные строки с русскими бук-
вами, укажите преобразование этих строк с помощью новой функции, например:
cout << rus_str( "Введите текущий год и нажмите ENTER.\n" );
2) После завершения работы окно программы закрывается и не удается увидеть ре-
зультаты.
Для исправления этого недостатка проще всего предусмотреть в конце программы ввод
произвольного символа. Пока пользователь не нажмет какую-нибудь символьную клави-
шу и потом Enter, окно программы будет оставаться на экране. Для этого потребуется за-
вести символьную переменную (строку с описанием этой переменной расположите после
строки с описанием целочисленных переменных):
char wait_char;
Перед строкой с оператором возврата "return 0" добавьте оператор для ввода символа
с клавиатуры:
cin >> wait_char;
__________________

Дышите думайте глубже, вы взволнованы умны.

Последний раз редактировалось Hogofogo; 11.07.2007 в 00:43.
Hogofogo вне форума   Ответить с цитированием
Старый 11.07.2007, 11:54 ↑ #65
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
Thumbs up Re: Уроки программирования на C++ для начинающих

СПАСИБО ОГРОМНОЕ! Все отлично работает. В очередной раз поражаюсь красоте решений на Си. Жаль сам не догадался
Надеюсь на дальнейшую помощь в моем обучении.
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 11.07.2007, 21:49 ↑ #66
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

Всегда пожалуйста
__________________

Дышите думайте глубже, вы взволнованы умны.
Hogofogo вне форума   Ответить с цитированием
Старый 12.07.2007, 15:20 ↑ #67
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

У меня следующая проблема, вот программа:
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
**
int x;
scanf ("%i\n",x);

return 0;
}
//-------------------------------------------------
Как я понимаю, программа должна работать так:
1)ввожу целое число;
2)нажимаю Enter;
3)окно консоли ичезает.
А на самом деле между 2 и 3 пунктами приходится повторять 1 и 2.
Помогите разобраться в чем дело. Plz...
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 12.07.2007, 21:17 ↑ #68
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

в строке - спецификации формата ( первый аргумент) для ввода целых чисел
нужно применять %d для ввода десятичных чисел
%x для ввода гексадецимальных чисел, %i -автоопределение основания и т.д.

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

здесь \n - второй элемент спецификации, поэтому и...

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

proga1 arg1 arg2 | proga 2 | proga3 > rezultat.txt

смысл команды: запустить proga1 с аргументами arg1 и arg2,
то что выдаст прога1 не выводить на экран а направить в качестве ввода с клавиатуры программе proga2.
А что выдаст она, "скормить" программе 3, чью выдачу вместо экрана записать в файл rezultat.txt

Это изобретение математиков-расчётчиков из мира юниксов, в виндузе тоже реализовано.


Правильный текст примерчика такой:

#include <stdio.h>
int main(int argc, char* argv[])
{int x, ii;
ii=scanf ("%i", &x); // ожидает аргумент-указатель на ячейку памяти под число

printf("scanf returns %d\nx is %d\n", ii, x);

return 0;
}
__________________

Дышите думайте глубже, вы взволнованы умны.

Последний раз редактировалось Hogofogo; 12.07.2007 в 21:23.
Hogofogo вне форума   Ответить с цитированием
Старый 17.07.2007, 12:16 ↑ #69
AMAP-KALLIMAP
новосёл
 
Аватар для AMAP-KALLIMAP
 
Регистрация: 03.07.2007
Сообщений: 14
Репутация: 0
AMAP-KALLIMAP молчание-золото
По умолчанию Re: Уроки программирования на C++ для начинающих

Сколько ни мучил ее (ф-ю "scanf()"), да так и не понял ее логику
мож лучше для обычного консольного ввода cin >> использовать?
AMAP-KALLIMAP вне форума   Ответить с цитированием
Старый 17.07.2007, 23:08 ↑ #70
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

А что в хелповнике про неё написано?
Что она делает не так?
В тексте программы ей надо задать 2 или более аргументов.
Первый аргумент - строка, управляющая её поведением, последующие аргументы - адреса переменных, которым надо придать вводимые значения.
Количество и типы этих переменных должны соответствовать содержанию
управляющей строки.
Функция не отпускает терминал, пока ей не введут с него всё, что обещано
управляющей строкой.
scanf() в основном предназначена для применения в программах, запускаемых
из "батников", то есть из шелл-сценариев.
Для интерактивного ввода, не приводящего пользователя в бешенство, следует использовать другие средства.
Ввод из класса "поток" - одно из таких средств. Тут применяется переопределённая операция >>, которая умеет автоматически переводить
вводимые символы в число нужного типа. Быстро и лениво.

Можно строить более кудрявые манеры ввода чисел.
вот так например: _ _ _ _ _ _ _ _ _ _ _ ( нужна библиотека ncurses, я не знаю, поддерживает ли её билдер)
Вложения
Тип файла: rar kontur_.rar (2.0 Кб, 16 просмотров)
__________________

Дышите думайте глубже, вы взволнованы умны.

Последний раз редактировалось Hogofogo; 17.07.2007 в 23:12.
Hogofogo вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Текущее время: 15:19. Часовой пояс GMT +6.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot

ВКонтактeTwitterFacebook
Хотите связаться с нами? Напишите письмо, и мы обязательно ответим.