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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> getchar равное 0 или 1, не уловил сущности. 
V
    Опции темы
Clinuxoid
  Дата 27.10.2011, 02:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте уважаемые форумчане.

Сейчас попытаюсь обьяснить суть вопроса и из чего он возник.

И так, с С мне пришлось столкнутся в университете. До этого же с программированием я сильно не заморачивался. Моих знаний хватало на HTML ,CSS и так всякие мелочи. (короче совсем не на програмирование).
Теперь же я учу С и прошлось столкнутся с некоторыми вопросами. В университете мы учимся по книге "Керниган.Б и Ричи.Д Программирование на С" Думаю многим эта книга известна.
И так вопрос!

В главе в которой рассказывают про getchar упоминается что при применении переменная получает значение 0 или 1 .
А вот в каких случаях это происходит никто ничего не говорит.

А в итоге дается задание в которм просят проверить что выражение getchar () != EOF равно 1 или 0.
Как результат не могу понять когда же оно 0 и когда 1.

Дабы дать пример того примера который дан в книге напишу листинг программы которую дают авторы. Грубо я ее понимаю.
Но внятных обьяснений ей не дают.

Код

#include <stdio.h>

main ()
{
  int c;
  
  while ((c = getchar () ) ! = EOF )
     putchar (c);
}


Прошу не судить очень строго, в программировании я полный профан потому и прошу помощи у опцтных мира сего  smile 

Это сообщение отредактировал(а) Clinuxoid - 27.10.2011, 02:55
PM MAIL WWW   Вверх
newbee
Дата 27.10.2011, 09:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

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



Цитата
getchar() return the character read as an unsigned char cast to an  int or EOF on end of file or error

getchar возвращает символ, прочитанный из stdin (например, введенный с клавиатуры), или EOF - некоторую константу, которая говорит, что больше читать нечего.

Цитата(Clinuxoid @  27.10.2011,  03:41 Найти цитируемый пост)
getchar () != EOF равно 1 или 0. Как результат не могу понять когда же оно 0 и когда 1.
В C нет понятий истина/ложь, вместо этого используют 0 - ложь, любое другое число - истина. Результат сравнения - истина (1) или ложь (0). Значит (getchar()!=EOF)==0, если следующий символ равен EOF и 1, если не равен.

Можно преобразовать getchar()!=EOF в !(getchar()==EOF), может тебе так проще будет сообразить.


--------------------
You're face to face
With man who sold the world
PM   Вверх
Clinuxoid
Дата 27.10.2011, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(newbee @ 27.10.2011,  09:03)
Цитата
getchar() return the character read as an unsigned char cast to an  int or EOF on end of file or error

getchar возвращает символ, прочитанный из stdin (например, введенный с клавиатуры), или EOF - некоторую константу, которая говорит, что больше читать нечего.

Цитата(Clinuxoid @  27.10.2011,  03:41 Найти цитируемый пост)
getchar () != EOF равно 1 или 0. Как результат не могу понять когда же оно 0 и когда 1.
В C нет понятий истина/ложь, вместо этого используют 0 - ложь, любое другое число - истина. Результат сравнения - истина (1) или ложь (0). Значит (getchar()!=EOF)==0, если следующий символ равен EOF и 1, если не равен.

Можно преобразовать getchar()!=EOF в !(getchar()==EOF), может тебе так проще будет сообразить.

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

Превую часть написанного понимал. А вот с воторой же все обстояло хуже.

Но глядя на это с высоты обьясненного вами понимаю что это простейшая арифметика.

!= ( обозначает не равно ); == (обозначает равно) . Иными словами те самые 0 и 1.

Жаль только авторам не написать что они черезчур замудрили в обьяснении.
Не ужель им так трудно было написать то же самое без хитрозадых закрутасов. 
Я над этим часа три просидел пытаясь перечитать страницу и вникнуть.
А все настолько просто. smile 

Еще раз огромнейшее вам спасибо.  smile 
PM MAIL WWW   Вверх
math64
Дата 27.10.2011, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Возможно, ты начал читать не с начала - где то раньше в книжке написано про == и !=, что 1 означает true, а 0 false. А возможно переводчики намудрили.


Модератор: поменял 0 и 1 местами, чтобы новички не путались

Это сообщение отредактировал(а) bsa - 27.10.2011, 14:36
PM   Вверх
Clinuxoid
Дата 27.10.2011, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(math64 @ 27.10.2011,  13:36)
Возможно, ты начал читать не с начала - где то раньше в книжке написано про == и !=, что 0 означает true, а 1 false. А возможно переводчики намудрили.

Да нет, начал читать исключительно с начала.   smile 

Это сообщение отредактировал(а) Clinuxoid - 27.10.2011, 14:24
PM MAIL WWW   Вверх
bsa
Дата 27.10.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Clinuxoid, ну значит авторы предположить не могли, что кто-то не знает таких элементарных вещей.
Цитата(Clinuxoid @  27.10.2011,  13:28 Найти цитируемый пост)
!= ( обозначает не равно ); == (обозначает равно) . Иными словами те самые 0 и 1.

Вообще-то, 0 и 1 и операторы сравнения это два разных понятия. Если вторые выполняют какое-то действие, то первые являются результатом этого действия. Причем, положительный результат не обязательно 1. Он может быть ЛЮБЫМ ОТЛИЧНЫМ ОТ НУЛЯ. Кстати, компилятор MSVC предупреждает об этом при попытке использования результата булевой операции (это та, которая возвращает true или false) в обычной арифметике.
PM   Вверх
Clinuxoid
Дата 28.10.2011, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bsa @ 27.10.2011,  14:41)
Clinuxoid, ну значит авторы предположить не могли, что кто-то не знает таких элементарных вещей.
Цитата(Clinuxoid @  27.10.2011,  13:28 Найти цитируемый пост)
!= ( обозначает не равно ); == (обозначает равно) . Иными словами те самые 0 и 1.

Вообще-то, 0 и 1 и операторы сравнения это два разных понятия. Если вторые выполняют какое-то действие, то первые являются результатом этого действия. Причем, положительный результат не обязательно 1. Он может быть ЛЮБЫМ ОТЛИЧНЫМ ОТ НУЛЯ. Кстати, компилятор MSVC предупреждает об этом при попытке использования результата булевой операции (это та, которая возвращает true или false) в обычной арифметике.

Дело в том что, то что true и false это 1 и 0 . Я то знаю (и надо быть уникумом чтобы этого не знать) но то что запутало, это то что они привязывали это с getchar (отсюда кстати и название темы, если вы заметили). 
И вот тут то как раз я и начал путатся. Оттуда и возник вопрос когда же он 0 а когда 1
Потому что особенно все эт никто не обьяснял.

Легче всего указать накого то пальцем и сказать "дебил". Просто тема для меня новая и пытаюсь нормально в ней разобратся.
Заметь, многие бы не обратили внимания и пошли бы дальше. Я же решил разобратся, потому и задал этот вопрос.

Что же касается MSVC
Visual studio не использую так как работаю непосредственно на linux
И компилирую при помощи GCC. В принципе меня он устраивает и отчеты выводит вполне нормальные.
Просто как я уже сказал я в этом деле новичек и некоторые вещи пока не понимаю.
Но надеюсь скоро поднаторею в этом деле, потому что  интересно.
PM MAIL WWW   Вверх
xvr
Дата 31.10.2011, 15:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Clinuxoid @  28.10.2011,  14:39 Найти цитируемый пост)
но то что запутало, это то что они привязывали это с getchar 

Не с getchar, а с результатом сравнения возвращаемого им значения с константой EOF. Сам getchar возвращает прочтенный символ, а не true/false (и даже не 0/1)  smile 

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

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

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

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

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


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

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


 




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


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

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