Обсуждение:Язык Си в примерах/ASCII-коды символов: различия между версиями
Содержимое удалено Содержимое добавлено
Char!1 |
Отмена правок до редакции 48657; →Проблемы: добавлены комментарии; оформление. |
||
Строка 1:
== Проблемы ==
Здравствуйте. Откомпилировав и запустив программу обнаружил следующее:
В моей редакции программа выглядит следующим образом:▼
▲2. При нажатии ESC - программа продолжает работать. Видимо, программа особым образом обрабатывает символ ESC. Чтобы программа завершалась корректно, я заменил ESC на символ '!' (код 33).
<source lang="c">
▲3. При компиляции программа выдаёт предупреждение:
void
</source>
{{Unsigned2 |2007-02-01 09:03:46|Rumynov}}
▲В моей редакции программа выглядит следующим образом:
: Попробуй использовать вместо функции getchar () функцию
▲ #include <stdio.h>
:: Функция <code >getch ()</code> {{Якорь2 |не определена}} [[w:C11 |стандартом,]] так что такая программа потребует по меньшей мере использования библиотеки, подобной {{w |Ncurses}}. Кроме того, будет потеряна возможность использовать перенаправление [[w:Стандартные потоки#Стандартный ввод |стандартного ввода]] для получения кодов из файла (подобно: {{Cmdl |$ |decdump < file}}) или конвейера ({{Cmdl |$ |myprog | decdump}}). — [[User:Ivan Shmakov|Ivan Shmakov]] ([[User talk:Ivan Shmakov|о]] ▞ [[Special:Contributions/Ivan Shmakov|в]]) 09:47, 16 апреля 2015 (UTC)
▲ void main ()
▲ {
▲ int ch;
▲ do {
▲ ch = getchar();
▲ if (ch != 10)
▲ printf ("Вы нажали %c. ASCII код = %d\n", ch, ch);
▲ while (ch = 33);
▲ }
: У меня была похожая проблема; мой вариант решения: вместо void main () пишем просто int main () или int main (void) и потом return 0; в соотв. месте. (может быть это особенности диалектов c или компилятора gcc). [[Служебная:Contributions/94.50.187.3|94.50.187.3]] 15:48, 15 ноября 2009 (UTC) anonymous▼
▲Попробуй использовать вместо функции getchar() функцию getche() - она умеет обрабатывать ESC.
:: В текущей редакции кода эта проблема устранена; [[w:C11 |стандарт]] допускает объявление главной функции как <code >int main ()</code>, <code >int main (void)</code> или <code >int main (int argc, char *argv[])</code>. — [[User:Ivan Shmakov|Ivan Shmakov]] ([[User talk:Ivan Shmakov|о]] ▞ [[Special:Contributions/Ivan Shmakov|в]]) 09:47, 16 апреля 2015 (UTC)
▲ [[Служебная:Contributions/85.173.101.210|85.173.101.210]] 07:26, 9 марта 2008 (UTC)Мимо проходил
▲У меня была похожая проблема; мой вариант решения: вместо void main() пишем просто int main() или int main(void) и потом return 0; в соотв. месте. (может быть это особенности диалектов c или компилятора gcc). [[Служебная:Contributions/94.50.187.3|94.50.187.3]] 15:48, 15 ноября 2009 (UTC) anonymous
: То ли это можно сделать стандартным методом (использование другой функции считывания символов или использовать getchar по-другому), то ли понадобиться писать отсебятину...
: [[Служебная:Contributions/89.20.107.198|89.20.107.198]] 17:22, 9 ноября 2009 (UTC) anomymous
▲мне кажется что проблему выдачи символа "ENTER" ("символ переход на новую строчку" он же "newline") можно избежать, если заставить программу просто считывать символ с клавиатуры, без необходимости подтверждения enter-ом (т.е. реакция по нажатию клавиши), вопрос только в том как это сделать...
:: В рамках [[w:C11 |стандарта]], AFAIK, такая задача не решается. В остальном — см. [[#не определена |выше]]. — [[User:Ivan Shmakov|Ivan Shmakov]] ([[User talk:Ivan Shmakov|о]] ▞ [[Special:Contributions/Ivan Shmakov|в]]) 09:47, 16 апреля 2015 (UTC)
▲То ли это можно сделать стандартным методом (использование другой функции считывания символов или использовать getchar по-другому), то ли понадобиться писать отсебятину...[[Служебная:Contributions/89.20.107.198|89.20.107.198]] 17:22, 9 ноября 2009 (UTC) anomymous
|