Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: не работает eof 27  (Прочитано 16142 раз)
0 Пользователей и 1 Гость смотрят эту тему.
romanrex
Гость
« : 26-11-2008 23:42 » 

Начинаю изучать С++ по книге Б.И. Пахомова "С/С++ и Borland C++ Builder".

Система WinXP SP2, С++Builder 6.

В первых же примерах обнаружил, что не работет <esc> для консольных окон.

Пример/упражнение

Код:
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
 #include <conio.h>
 #define eof 27
//---------------------------------------------------------------------------

#pragma argsused
int main()
{
        int c;
        printf("Make input\n") ;
        while ((c=getchar())!=eof)
        putchar(c);
        getch();
}

При нажатии <esc> никакой реакции. В более сложных примерах работает,если сравнение идет не с oef, а просто с переменной, которой присвоена определенное слово. Это проблема системы, буилдера или чего-то еще?

Где искать источник проблем?
Записан
sss
Специалист

ru
Offline Offline

« Ответ #1 : 27-11-2008 05:24 » 

romanrex, чему равен c при нажатии на esc?
Записан

while (8==8)
romanrex
Гость
« Ответ #2 : 27-11-2008 06:04 » 

sss,
не знаю, если верить книге, то 27, но не работает. А как это можно выяснить?
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #3 : 27-11-2008 06:23 » 

Обычно конец файла оправляется не по ESC, а по CTRL+D
код конца файла больше 255 поэтому собственно переменная C имеет тип int, а не char
Записан

Странно всё это....
sss
Специалист

ru
Offline Offline

« Ответ #4 : 27-11-2008 06:32 » 

romanrex, замени код

Код:
  int c;
  printf("Make input\n") ;
  while ( 1 == 1)
  {
    c = getchar();
    printf("c = %d\n",  c) ;
    if ( c == eof) break;
  }
  getch();

А вообще надо пользоваться отладчиком
Записан

while (8==8)
romanrex
Гость
« Ответ #5 : 27-11-2008 06:39 » 

LogRus,
255 и CTRL+D не помогло. Может проблема в настройках консоли?


sss
при таком коде пишет номера символов, но на esc не пише, это предпоследняя сточка, только ентер высветился Жаль
Записан
sss
Специалист

ru
Offline Offline

« Ответ #6 : 27-11-2008 07:37 » 

romanrex, ни хера не понимаю.  В ASCII v = 118, ESC = 27, но CR = 13 a LF = 10. А этот сдвиг в пропущенной строке и есть LF. Ни CR ни ESC не виден. Я думаю там скэнкод двухбайтовый, и младший байт равен 0. Надо вычитывать поток по другому...
Записан

while (8==8)
romanrex
Гость
« Ответ #7 : 27-11-2008 08:01 » 

Попробовал на другом компе, да же ситуация...

Может проблема в том, что запуск делается через F9? а надо как-то по другому запускать?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 27-11-2008 08:57 » 

romanrex, я думаю, что примеры в книге даны для BC++ 3.1, который компилил программы для MSDOS. Консольное приложение в винде - это не DOS. Оттуда и расхождение.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
romanrex
Гость
« Ответ #9 : 27-11-2008 09:03 » 

Мне кажется, там версия 5 рассматривается... а у меня 6-тая. Просто что делать дальше? В дальнейших примерах не прокатывает задание переменной в виде слова 'stop' Жаль там нужна реакция на esc Жаль
« Последнее редактирование: 27-11-2008 09:14 от romanrex » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 27-11-2008 16:37 » 

http://msdn.microsoft.com/en-us/library/ms683167(VS.85).aspx

GetConsoleMode

ENABLE_LINE_INPUT
ENABLE_PROCESSED_INPUT
« Последнее редактирование: 27-11-2008 16:57 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
romanrex
Гость
« Ответ #11 : 28-11-2008 04:26 » 

RXL,
Если несложно, поясните пожалуйста, как мне это применить на практике в примере выше Улыбаюсь
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 28-11-2008 13:43 » 

romanrex, я дал направление, куда рыть - прошу читать MSDN. У меня на него лишнего времени нет.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
romanrex
Гость
« Ответ #13 : 28-11-2008 14:05 » 

RXL,
Если бы с таким столкнулся бы под конец книги, то можно было бы понять про самостоятельное разбирание... но в данном случае тот документ не говорит ни о чем, не представляю, даже что там вообще смотреть Жаль
Этот пример второй или третий в самом начале книги...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 03-12-2008 21:21 » new

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

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines