Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> #define eof - что надо сделать? 
:(
    Опции темы
Grek74
  Дата 17.1.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Помогите пожалуйста.
Я С++ Builder 6 осваивать пытаюсь с помощью книги, там в написано например  "#define eof 27" , тоисть когда я нажимаю на Esc то должен происходить end-of-file , окончание данной операции, но неработает :(
Вот неработающий пример :

Код

#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#define eof 27
//---------------------------------------------------------------------------

int main()
{
 long nc;
 nc=0;
 printf ("make inpun>\n");
 while (getchar () !=eof)
        nc++;
 printf ("character's number is: %ld\n",nc);
 getch();
 }


Что сделать подскажите...
 ! 
archimed7592
Не забываем пользоваться кнопкой "Код" или тэгами [code=xxx][/code]


Это сообщение отредактировал(а) archimed7592 - 17.1.2008, 16:40
PM MAIL   Вверх
archimed7592
Дата 17.1.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Grek74 @  17.1.2008,  16:37 Найти цитируемый пост)
тоисть когда я нажимаю на Esc то должен происходить

Это ты такой вывод сделал? Или в книге написано?

Ввод завершится когда нажмёшь ctrl+Z -> enter


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Grek74
Дата 17.1.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Код

 while (getchar () !=eof)
        nc++;
 printf ("character's number is: %ld\n",nc);



Как я понял из книги , то когда я нажимаю Esc то должен завершиться "while" и начаться "printf", но у меня совсем ничего непроисходит :( а все остальные примеры в книге с использованием  "define eof"
PM MAIL   Вверх
ama_kid
Дата 17.1.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Цитата(Grek74 @  17.1.2008,  16:47 Найти цитируемый пост)
getchar ()
это макрос, который осуществляет чтение из stdin и выход осуществляется либо по Ctrl+Z, либо по Enter... Тебе вместо него надо использовать getch() (судя по логике программы)



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
archimed7592
Дата 17.1.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Grek74 @  17.1.2008,  16:47 Найти цитируемый пост)
Как я понял из книги , то когда я нажимаю Esc то должен завершиться "while"

Ты плохо понял - по нажатию esc выход не произойдёт. Произойдёт он по ctrl+z.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Grek74
Дата 17.1.2008, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Цитата(ama_kid @ 17.1.2008,  16:53)
Цитата(Grek74 @  17.1.2008,  16:47 Найти цитируемый пост)
getchar ()
это макрос, который осуществляет чтение из stdin и выход осуществляется либо по Ctrl+Z, либо по Enter... Тебе вместо него надо использовать getch() (судя по логике программы)


Вот цитата из книги:
Если обозначить символическую константу, задающую значения признака конца ввода с клавиатуры EOF, то, воспользовавшись оператором #define, в начале программ ввода данных с клавиатуры мы можем написать:
#define eof 27 // признак конца ввода символов с клавиатуры.


ama_kid - тоисть в книге неправильно написан пример?

Добавлено через 10 минут и 43 секунды
Цитата(archimed7592 @ 17.1.2008,  17:00)
Цитата(Grek74 @  17.1.2008,  16:47 Найти цитируемый пост)
Как я понял из книги , то когда я нажимаю Esc то должен завершиться "while"

Ты плохо понял - по нажатию esc выход не произойдёт. Произойдёт он по ctrl+z.

попробовал с "Ctrl+z" , просто появляется "^Z" а дальше всё также :(
PM MAIL   Вверх
ama_kid
Дата 17.1.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Цитата(Grek74 @  17.1.2008,  17:01 Найти цитируемый пост)
ama_kid - тоисть в книге неправильно написан пример?
я не знаю, как написано в книге, но в принципе я недалек от мысли, что авторы книг специально вводят небольшие погрешности в примеры, дабы изучавший, разбираясь, лучше усвоил уроки... smile 
И вообще, если я правильно помню, при вводе в stdin клавиша ESC ничего не кладет в буфер - она выполняет очистку введенного... Поэтому есть подозрение, что тебе таким макаром не считать ESC...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Grek74
Дата 17.1.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Цитата(ama_kid @ 17.1.2008,  17:47)
Цитата(Grek74 @  17.1.2008,  17:01 Найти цитируемый пост)
ama_kid - тоисть в книге неправильно написан пример?
я не знаю, как написано в книге, но в принципе я недалек от мысли, что авторы книг специально вводят небольшие погрешности в примеры, дабы изучавший, разбираясь, лучше усвоил уроки... smile 
И вообще, если я правильно помню, при вводе в stdin клавиша ESC ничего не кладет в буфер - она выполняет очистку введенного... Поэтому есть подозрение, что тебе таким макаром не считать ESC...

А немогли бы вы исправить код, на правильный чтобы я понял и отвязался? smile
PM MAIL   Вверх
ama_kid
Дата 17.1.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Цитата(Grek74 @  17.1.2008,  17:58 Найти цитируемый пост)
А немогли бы вы исправить код, на правильный чтобы я понял и отвязался? smile 

Цитата(ama_kid @  17.1.2008,  16:53 Найти цитируемый пост)
Тебе вместо него надо использовать getch() (судя по логике программы)

Код
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#define eof 27
//---------------------------------------------------------------------------
int main()
{
 long nc=0;
 int c=0;
 printf ("make inpun>\n");
 while ((c=getch()) !=eof)
        {
        printf("%c",c);
        nc++;
        }
 printf ("\ncharacter's number is: %ld\n",nc);
 getch();
}



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Grek74
Дата 17.1.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Большое спасибо!!! smile
PM MAIL   Вверх
archimed7592
Дата 17.1.2008, 18:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Grek74 @  17.1.2008,  17:01 Найти цитируемый пост)
Вот цитата из книги:
Если обозначить символическую константу, задающую значения признака конца ввода с клавиатуры EOF, то, воспользовавшись оператором #define, в начале программ ввода данных с клавиатуры мы можем написать:
#define eof 27 // признак конца ввода символов с клавиатуры.

Ок, давай учиться читать: где в этом тексте ты увидел, что после этого концом ввода будет именно ESC?

Цитата(Grek74 @  17.1.2008,  17:01 Найти цитируемый пост)
попробовал с "Ctrl+z" , просто появляется "^Z" а дальше всё также :( 
Оптять же, тебе поможет умение читать: я писал, что после ctrl+z нужно ещё нажимать enter
Цитата(archimed7592 @  17.1.2008,  16:42 Найти цитируемый пост)
Ввод завершится когда нажмёшь ctrl+Z -> enter 


Добавлено через 1 минуту и 40 секунд
ps. Если вопрос решён, поставь соответствующую галочку.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
warmonger_
Дата 17.1.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.7.2007
Где: г. Киев

Репутация: 1
Всего: 3



Цитата(archimed7592 @  17.1.2008,  18:06 Найти цитируемый пост)
Цитата(Grek74 @  17.1.2008,  17:01 Найти цитируемый пост)
Вот цитата из книги:
Если обозначить символическую константу, задающую значения признака конца ввода с клавиатуры EOF, то, воспользовавшись оператором #define, в начале программ ввода данных с клавиатуры мы можем написать:
#define eof 27 // признак конца ввода символов с клавиатуры.

Ок, давай учиться читать: где в этом тексте ты увидел, что после этого концом ввода будет именно ESC?


 smile  тут не в примере проблема
--------------------
Make everything as simple as possible, but not simpler.Albert Einstein
PM MAIL   Вверх
Grek74
Дата 19.1.2008, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Цитата(archimed7592 @ 17.1.2008,  18:06)
Цитата(Grek74 @  17.1.2008,  17:01 Найти цитируемый пост)
Вот цитата из книги:
Если обозначить символическую константу, задающую значения признака конца ввода с клавиатуры EOF, то, воспользовавшись оператором #define, в начале программ ввода данных с клавиатуры мы можем написать:
#define eof 27 // признак конца ввода символов с клавиатуры.

Ок, давай учиться читать: где в этом тексте ты увидел, что после этого концом ввода будет именно ESC?

ну, в книге  написано что типо 27 - это код Esc...
PM MAIL   Вверх
archimed7592
Дата 19.1.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Grek74 @  19.1.2008,  11:28 Найти цитируемый пост)
ну, в книге  написано что типо 27 - это код Esc... 

 smile.
Могу только посоветовать обзавестись другой книгой.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
digitech
Дата 2.2.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 1.4.2007

Репутация: нет
Всего: 1



А для чего тогда getchar();  если getch(); есть?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1606 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.