Проверьте что выражение getchar eof действительно равно 1 или 0

EOF и getchar
Добрый вечер, у меня есть следующий код: #include #include #include.

Проверьте что выражение getchar eof действительно равно 1 или 0Подсчет символов, используя getchar и EOF
В книге по C (Керниган, Ритчи) приводится пример программы, считающей кол-во символов введенных с.

Не выводится printf() при (c=getchar()!=EOF
Народ, помогите разобраться. Пример из книги Кернигана. При вводе EOF (Ctrl^C) закрывается.

Fon Eberkopff, зачем вы создаёте эти темы? Для выкладывания решений к задачам можете использовать свой блог

Fon Eberkopff, если вы хотите обсудить, тогда помимо кода выкладывайте и вопрос. Например: «Какой из представленных вариантов вы считаете наиболее оптимизированным? Как бы вы решили эту задачу?» Я, например, долго пытался понять, что вы хотите получить от участников форума, опубликовав подобную тему.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Проверьте что выражение getchar eof действительно равно 1 или 0При вводе данных цикл по поиску EOF в Getchar не останавливается
Здраствуйте, вот такая проблема: #include main() < int nc=0; while(getchar().

Проверьте что выражение getchar eof действительно равно 1 или 0Как выглядит интер в ascii, getchar и его исчерпание, Константа EOF,
Я не по наслышке знаю что при вводе символа мы фактически вводим и символ с клавиатуры и сам интер.

Источник

I understand the main() function, the declaration of the integer c and the while loop. Yet I’m confused about the condition inside of the while loop. What is the input in this C code, and what is the output.

Sorry if this is a basic and stupid question, but I’m just looking for a simple explanation before I move on in the book and become more confused.

Проверьте что выражение getchar eof действительно равно 1 или 0

8 Answers 8

This code can be written more clearly as:

The EOF character is received when there is no more input. The name makes more sense in the case where the input is being read from a real file, rather than user input (which is a special case of a file).

getchar() is a function that reads a character from standard input. EOF is a special character used in C to state that the END OF FILE has been reached.

Usually you will get an EOF character returning from getchar() when your standard input is other than console (i.e., a file).

If you run your program in unix like this:

Then your getchar() will return every single character in somefile and EOF as soon as somefile ends.

If you run your program like this:

And send a EOF through the console (by hitting CTRL+D in Unix or CTRL+Z in Windows), then getchar() will also returns EOF and the execution will end.

The code written with current C standards should be

The loop could be rewritten as

If an actual error occurred, the variable errno defined by would contain the error code; the function perror can be used to automatically display a human readable error message with a prefix. Thus we could expand the example to

To trigger the end-of-file, one would use Ctrl+D (here displayed as ^D ) on a new line on Linux:

(notice how the input here is line-buffered, so the input is not interleaved within the line with output).

Likewise, we can get the same effect by using a pipeline.

To trigger an error is a bit more tricky. In bash and zsh shells the standard input can be closed so that it doesn’t come from anywhere, by appending to the command line:

Источник

Я только начал изучать программирование (C) в качестве хобби, сам. Я использую K&R.

Кажется, я понимаю, что происходит:

Однако мое решение неверно, поэтому я явно чего-то не понимаю:

Это просто печатает значение символа. А также печатает «10», если я нажму клавишу возврата каретки.

Я думал, что он напечатает c. Однако он печатает значение символа, а не значение 1 или 0.

Я знаю, что c присваивается 1 или 0 после сравнения его с EOF. Но я не уверен, какую логику я могу использовать, чтобы показать это. Кажется, мне нужно как-то ‘get out’ показать значение символа, а вместо этого показать значение сравнения. Значит ли это, что мне нужно выбраться из while loop? Если да, то я не знаю как (и это только предположение).

Как я могу просто проверить, что c = 1 или 0?

И еще, откуда мне это знать? Должно же быть что-то фундаментальное, что я должен извлечь из этого, я полагаю.

Я тоже сделал это, и я думаю, что это, кажется, работает. Поскольку он не выводит никаких символов, но я не уверен, что это то решение, которое они ищут.

7 ответов

Я успешно воспроизвел ответ на K&R 1.9, Напишите программу, чтобы скопировать ее входные данные в выходные, заменив каждую строку из одного или нескольких пробелов одним пробелом. Код, которому я следовал, выглядит следующим образом: #include int main(void) < int c; int.

Я знаю, что c присваивается 1 или 0 после сравнения с EOF

Нет, это не так. Смотри:

EDIT:

Это не решение проблемы! вот переписанный код:

Важно понимать, что вы можете присвоить переменной результат выражения сравнения (то есть выражение с по крайней мере одним оператором сравнения), и результат такого выражения равен 0 (для false) или 1 (для true).

Несколько слов о комментарии OP:

Эй, спасибо. Но K&R явно говорит: «Это имеет нежелательный эффект установки c в 1 или 0». Может быть, именно поэтому я в замешательстве.

c будет присвоено значение 0 или 1, если while выглядит следующим образом:

Я понимаю, что вопрос старый, но выбранный ответ отвечает на то, что не является тем, что должен быть задан вопрос. (Это другой вопрос, заданный в книге) Я здесь, чтобы прояснить несколько вещей и надеюсь, что другие люди, которые искали этот вопрос в Google, смогут прочитать мой ответ для лучшего понимания вопроса 1-6 из 2-го издания языка программирования C.

В книге намекалось, что

Для выполнения упражнения используйте это:

NOTE: Чтобы ввести EOF в Windows, используйте Ctrl + Z

Более простое решение для упражнения 1.6 из K&R.

‘c’ присваивается значение из getchar, а затем проверяется, является ли оно EOF.

Если ему не присвоено EOF, выведите значение ‘c’; если нет, выполните цикл.

тест для EOF не переназначает какое-либо значение на ‘c’, он только завершается успешно или завершается неудачно

IOW, удалите свой шаг 3.

Здесь c не присваивается результату сравнения. Он содержит value read form File.

Для проверки результата сравнения вам необходимо следующее

Затем используйте результат, чтобы проверить, что он равен 0 или 1.

У меня было много проблем с этой самой проблемой.

А также печатает «10», если я нажму клавишу возврата каретки.

Кроме того, на странице 20 K&R указано, что значение ASCII для ‘\n’ равно 10. Так что, возможно, вы возвращаете это значение непреднамеренно?

Каждый раз, когда я возвращаюсь к нему, я забываю, что ключ возврата каретки- ЭТО НЕ EOF.

Как указывает пользователь Sayyora выше, вам нужна комбинация клавиш для сигнала EOF.

Я использую исходный файл C в DevC++ 4.9.9.2. Я новичок в программировании в C и использую K/R 2-е изд. в качестве руководства. После просмотра приведенных выше утверждений я обнаружил, что следующие строки предоставили мне желаемый результат в примере 1.6/1.7. Не стесняйтесь исправлять мое понимание, но, подхватив совет автора(ов) об использовании скобок и печати как внутри, так и снаружи while loop, можно получить результат 1 или 0. Последний getchar()-это требование среды Dev-C держать экран ввода/вывода открытым для просмотра печатных заявлений.

Похожие вопросы:

Я выполнял упражнение 1-9 (напиши программу, чтобы скопировать ее входные данные в выходные, заменив каждую строку одного или нескольких пробелов одним пробелом) из этой книги, и, похоже, я не.

Я изучаю C из k&r как первый язык, и я просто хотел спросить, считаете ли вы, что это упражнение решается правильно, я знаю, что оно, вероятно, не так полно, как вам хотелось бы, но мне нужны.

Я успешно воспроизвел ответ на K&R 1.9, Напишите программу, чтобы скопировать ее входные данные в выходные, заменив каждую строку из одного или нескольких пробелов одним пробелом. Код, которому.

Мне очень жаль, что я задал этот глупый вопрос, а кроме того, я проверил темы, связанные с этим постом, но до сих пор не нашел никакой помощи. В приведенном ниже фрагменте кода: #include.

ищу упражнение 1-9 из книги K&R (копирование ввода в вывод. Замените каждую строку из нескольких пробелов одним пробелом) Я нашел этот код на этом сайте. #include main() < int.

Источник

(Упражнение 1.6 K&R) Как проверить, что getchar ()! = EOF ИЛИ 0 ИЛИ 1?

Я только начал изучать программирование (C) в качестве хобби. Я использую K&R.

Думаю, я понимаю, что происходит:

Однако мое решение неверно, поэтому ясно, что я чего-то не понимаю:

Это просто печатает значение символа. А также печатает «10», если я нажимаю клавишу возврата каретки.

Я думал, что он напечатает c. Однако он печатает значение символа, а не значение 1 или 0.

Я знаю, что c присваивается 1 или 0 после сравнения с EOF. Но я не уверен, какую логику я могу использовать, чтобы показать это. Кажется, мне нужно как-то «выйти» из показа значения символа и вместо этого показать значение сравнения. Означает ли это, что мне нужно выйти из цикла while? Если да, то не знаю как (и это только предположение).

Как я могу просто проверить, что c = 1 или 0?

И также, как я должен это знать? Я полагаю, что должно быть что-то фундаментальное, чему я должен извлечь из этого урок.

7 ответов

Я знаю, что c присваивается 1 или 0 после сравнения с EOF

Нет, это не так. Посмотрите:

РЕДАКТИРОВАТЬ:

Приведенный выше код не является решением! Вот переписанный код:

Так что же происходит? Допустим, getchar вернет символ «A». Это значит, что:

Несколько слов о комментарии OP:

Привет спасибо. Но K&R прямо говорит: «Это приводит к нежелательному эффекту установки c в 1 или 0». Может поэтому я запутался.

c будет присвоено 0 или 1, если while выглядит следующим образом:

Я понимаю, что вопрос старый, но выбранный ответ отвечает на то, что не соответствует заданному вопросу. (Это другой вопрос, заданный в книге) Я здесь, чтобы прояснить несколько вещей и надеюсь, что другие люди, которые искали этот вопрос в Google, могут прочитать мой ответ, чтобы лучше понять вопрос 1-6 из языка программирования C 2 Версия.

Книга намекнула, что

Для упражнения используйте это:

ПРИМЕЧАНИЕ. Чтобы ввести EOF в Windows, используйте Ctrl + Z

Более простое решение упражнения 1.6 из K&R.

‘c’ присваивается значение из getchar, а затем проверяется, является ли оно EOF.

Если ему не назначен EOF, выведите значение c; если нет, существует цикл.

Тест для EOF не переназначает какое-либо значение для ‘c’, он только успешен или не работает

Здесь c не присваивается результату сравнения. Он содержит value read form File.

Для проверки результата сравнения вам потребуется следующее

Int результат = ((c = getchar ())! = EOF)

Затем используйте результат, чтобы проверить, равен ли он 0 или 1.

Что ж, когда вы вводите значение в ‘c’, это! = Поэтому он возвращает ‘1’, а когда вы отправляете команду EOF, он возвращает ‘0’.

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

Источник

Проверьте что выражение getchar eof действительно равно 1 или 0

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

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

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

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

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

Бревно
Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0

Профиль
Группа: Участник
Сообщений: 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

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

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

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

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

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

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

Эксперт
Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0

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

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

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

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

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

Эксперт
Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0

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

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

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

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

Цитата(bsa @ 27.10.2011, 14:41)
Clinuxoid, ну значит авторы предположить не могли, что кто-то не знает таких элементарных вещей.

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

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

Что же касается MSVC.
Visual studio не использую так как работаю непосредственно на linux.
И компилирую при помощи GCC. В принципе меня он устраивает и отчеты выводит вполне нормальные.
Просто как я уже сказал я в этом деле новичек и некоторые вещи пока не понимаю.
Но надеюсь скоро поднаторею в этом деле, потому что интересно.

Эксперт
Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0Проверьте что выражение getchar eof действительно равно 1 или 0

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

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

Цитата(Clinuxoid @ 28.10.2011, 14:39 Проверьте что выражение getchar eof действительно равно 1 или 0)
но то что запутало, это то что они привязывали это с getchar

Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0 Проверьте что выражение getchar eof действительно равно 1 или 0

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

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

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *