|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Помогите, пожалуйста, не могу въехать в такую важную суть как eof. использую Visual Studio, Window 7 . Как мне отловить eof этот несчастный ? ввел пару символов, а потом нажал Ctrl + z. ну посмотрел отладчиком последний символ в переменной c имеет код x1a . ну это ж не eof никакой. тогда как выловить ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 19:42 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81последний символ в переменной c имеет код x1a . Это первый символ, а не последний. Продолжай пошаговое выполнение. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 20:01 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Мне показалось что последний. Так как потом промсходит опять опрос ввода с клавиатуры getchar, а значит поток пуст ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 20:21 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
EOF это бред унаследованный из C, нездоровая методология, его просто не надо пользовать, пользуйся fread(). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 20:34 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dima T EOF это бред унаследованный из C, нездоровая методология, его просто не надо пользовать, пользуйся fread(). Да, это и есть C. Обязательно прислушаюсь. Но чтобы перейти на c++ сначала книжку керригана надо все же от корки до корки пройти, а там с. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 20:39 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81 Dima T EOF это бред унаследованный из C, нездоровая методология, его просто не надо пользовать, пользуйся fread(). Да, это и есть C. Обязательно прислушаюсь. Но чтобы перейти на c++ сначала книжку керригана надо все же от корки до корки пройти, а там с. Читай дальше, забудь про EOF, это неважно и сегодня ненужно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 20:46 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dima T, Хотелось бы все же минимизировать пробелы ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 20:51 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81 ну посмотрел отладчиком последний символ в переменной c имеет код x1a . ну это ж не eof никакой. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 21:02 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
bk0010, То есть условие цикла смысла не имеет? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 21:04 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81 Dima T, Хотелось бы все же минимизировать пробелы Пробелы чего? Бесполезных знаний? Зачем? Книга писалась 50 лет назад, за это время кое-что поменялось, кое-что стало не актуальным. Но основа осталась как есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 21:04 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81Мне показалось что последний. Тебе показалось. Продолжай отладку пока не произойдёт выход из цикла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 21:31 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81 bk0010, То есть условие цикла смысла не имеет? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 12:02 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
bk0010 bk0010, Но надо или вернуться к Visual Studio 6 а что вот это значит ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 12:38 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81а что вот это значит ? Ничего важного. Продолжай пошаговую отладку, не отвлекайся. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 12:55 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81а что вот это значит ? Ничего важного. Продолжай пошаговую отладку, не отвлекайся. да, спасибо. вроде бы получилось. eof научился вызывать. немного скорректировал код. примечательно, что спровоцировать eof получается только когда новая строка (поток пуст) и нажимаем Ctrl + z. Если я не прав и есть желание , то поправьте мои наблюдения Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 13:17 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
сделай цикл с постусловием, может легче увидеть будет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
andron81 да, спасибо. вроде бы получилось. eof научился вызывать. немного скорректировал код. примечательно, что спровоцировать eof получается только когда новая строка (поток пуст) и нажимаем Ctrl + z. Если я не прав и есть желание , то поправьте мои наблюдения Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Потому что getchar() вернет ноль (оно же false) как в случае реального окончания файла, так и в случае нахождения строки с единственным символом EOF. А вот Dima T не слушай, он в этом топике глупости говорил. EOF унаследован не из С, а из телетайпов - задолго до С. Вот там, не было физического конца файла, потому и требовался специальный символ, а когда в 1960-ом году создавали "стандарт" ASCII просто взяли все имеющиеся на сегодня специальные буквы телетайпа и воткнули их на первые 32 знакоместа в таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 17:31 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Да. Фондовые биржи до сих пор используют символ SOH (0x01) как разделитель между атрибутами биржевого протокола. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 18:38 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
getchar() возвращает int, не char. И EOF - это целое число, не совпадающее ни с одним возможным значение char. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 18:55 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Barlone getchar() возвращает int, не char. И EOF - это целое число, не совпадающее ни с одним возможным значение char. Вот и я так же прочитал в описании getchar. Так что скорее всего это никак не буква как писал товарищ выше. А скорее всего это состояние, ну то что определяется макросом это уже детали. Смущает только одно: почему я могу вызвать eof только когда поток пуст. То есть в этом случае я могу ctrl z щелкнуть. И тогда цикл именно МОЙ последний завершит работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 19:06 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
А когда вы будете читать текстовый поток в юниксах, то состояние "конец файла" будет формировать символ Ctrl+D. "Вот это поворот" P.S. Работаете с API - следуйте документации этого API. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 19:48 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Basil A. Sidorov А когда вы будете читать текстовый поток в юниксах, то состояние "конец файла" будет формировать символ Ctrl+D. "Вот это поворот" P.S. Работаете с API - следуйте документации этого API. Разумеется. Я в первом сообщении и указал какая у меня операционка и кстати и от ide там зависит наверно тоже, не ctrl z, а возможно сам eof может быть описан другой константой. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 19:53 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81а возможно сам eof может быть описан другой константой. А какой константой EOF описан у Вас? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:05 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Функции посимвольного чтения возвращают целое. Значения больше нуля - символы, а минус единица - признак конца ввода. Но пользоваться всё равно надо константой. Функция посимвольного чтения может возвращать символы с очень разными кодами, включая управляющие. Взялись работать на низком уровне - будьте готовы принять "необычные значения". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:06 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Barlonegetchar() возвращает int, не char. Вообще-то по-жизни (то есть изначально) она возвращала именно char. В int её перековали относительно недавно, когда внезапно обнаружилась буква "я" в кодировке Windows-1251. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:09 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Вообще-то по-жизни (то есть изначально) она возвращала именно char. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:15 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Barlonegetchar() возвращает int, не char. Вообще-то по-жизни (то есть изначально) она возвращала именно char. В int её перековали относительно недавно, когда внезапно обнаружилась буква "я" в кодировке Windows-1251. тогда интересно как в таком случае эта функция выдавала состояне eof , ведь все 255 символов задействованы, а байт отрицательное число не выдаст ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:16 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81а возможно сам eof может быть описан другой константой. описан в stdio как -1 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:17 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Dimitry Sibiryakov Вообще-то по-жизни (то есть изначально) она возвращала именно char. а вот оно что... сигнет чар ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:18 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81 тогда интересно как в таком случае эта функция выдавала состояне eof "Были рассмотрены и другие варианты кодировок, но необходимость использования более 128 кодов в общеупотребительных приложениях всё ещё неочевидна". Высказывание принадлежит американскому национальному комитету стандартизации и сделано оно было в 1963 году.а байт отрицательное число не выдастНет в Це байтов - только char. И он, внезапно, может быть знаковым. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:21 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Це байтов - только char. И он, внезапно, может быть знаковым. что это вы написали ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:30 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81, как я понимаю signed char это уже не байт. может это байт + 1 бит(фантазирую)? Но это тоже уже не байт )))))). но последнее я нигде не встречал, я думал, что всё это должно быть кратно 8. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 20:35 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
А надо не фантазировать а читать учебники и заголовочные файлы. char он всегда равен байту - это из учебника и стандарта языка. signed char - старший бит байта отдан под знак, остальные под код символа. Итого, на восмибитном байте - 1 бит под знак и 7 под букву - 128 букв, стандартный ASCII. unsigned char - все биты байт отданы под код символа. 256 букв - расширенный ASCII, оно же всяческие однобайтовые кодовые страницы. И да, байт не всегда восьмибитный, но размер char всегда в один байт. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 22:50 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Barlone getchar() возвращает int, не char. И EOF - это целое число, не совпадающее ни с одним возможным значение char. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 22:52 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owl А надо не фантазировать а читать учебники и заголовочные файлы. char он всегда равен байту - это из учебника и стандарта языка. signed char - старший бит байта отдан под знак, остальные под код символа. Итого, на восмибитном байте - 1 бит под знак и 7 под букву - 128 букв, стандартный ASCII. unsigned char - все биты байт отданы под код символа. 256 букв - расширенный ASCII, оно же всяческие однобайтовые кодовые страницы. И да, байт не всегда восьмибитный, но размер char всегда в один байт. Для этого книги надо эти иметь. И дойти. У меня только керриган, ритчи. Для меня например новость, что байт может быть не восьмибитным. Это просто революция какая-то ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 23:22 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owl Barlone getchar() возвращает int, не char. И EOF - это целое число, не совпадающее ни с одним возможным значение char. Почему так уж разразились критикой? Можете прокомментировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 23:47 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81 White Owl пропущено... Это такая несусветная глупость что просто "ОЙ". Почему так уж разразились критикой? Можете прокомментировать? Поэтому заявлять что "getchar() возвращает int, не char." и делать из этого выводы не особо полезно. Во вторых, если почитать конкретно документацию на getchar() то мы увидим: man getcharRETURN VALUE fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error. "И EOF - это целое число, не совпадающее ни с одним возможным значение char." Угу... открываем stdlib.h и видим там строку: Код: plaintext 1.
Это очень сильно не совпадает с возможными значениями char.... Ага, ага. Ну и никто же не запрещает сделать: Код: plaintext 1.
И да, если у тебя консоль работает в CP1251, то %c ты получишь букву "я" (строчная 33-я буква кириллицы). Потому что CP1251 ее код 255, что в случае однобайтного целого так-же кодирует и -1. Вообще, когда пишешь на Си, очень полезно понимать как работает компьютер. Если для вас язык это что-то такое волшебное и мистическое - успеха не будет совсем. Для С++ это тоже будет полезным, но в меньшей степени. И чем более "высокий" язык, тем допустимая степень волшебности выше, для успешного написания программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 02:03 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owl Ну начать можно с того, что int и char это практически одно и то-же, отличающееся всего-лишь размером. Причем только возможно отличающиеся. По стандарту (и это есть в K&R) и то и другое это целые числа при этом количество байт отданных под int больше или равно количеству байт отданных под char. sizeof(int) >= sizeof(char) Хотя ... P.S. Есть, конечно, у меня справочник по Це тысяча девятьсот семьдесят шестого, что ли, года издания. Девять бит в байте, варианты расположения байт в слове, отличающиеся от расположения слов в двойном слове, про длину идентификаторов и вообще про всякое, но, блин, в двадцать-то первом веке ... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 06:26 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owl По стандарту (и это есть в K&R) и то и другое это целые числа при этом количество байт отданных под int больше или равно количеству байт отданных под char. sizeof(int) >= sizeof(char) да, в К&R написано, что char может быть и signed. в этом случае числа попадают в отрезок от -127 до 127. но когда мы объявлем переменную как просто char (без указания signed/unsigned) тут и возникают непонятки. картинка так же можно и с -10 аналогичное поведение увидеть, а так же в переменную можно долбануть 130 , что тоже прокатит. так sined или unsigned ??? White Owl Во вторых, если почитать конкретно документацию на getchar() то мы увидим: fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error. правильно вот и написано, что возвращенное значение это или символ (причем unsigned char, см. описание выше) или eof или ошибка. то есть eof не относят к символам всё же. это скорее состояние. ассоциировать его с символом я считаю неправильным. хотя физически и можно так как читать ниже White Owl Ну и никто же не запрещает сделать: Код: plaintext 1.
И да, если у тебя консоль работает в CP1251, то %c ты получишь букву "я" (строчная 33-я буква кириллицы). Потому что CP1251 ее код 255, что в случае однобайтного целого так-же кодирует и -1. да это буква "я" см. и моя картинка так же это подтверждает, но почему это так вне моего понимания. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 10:58 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81почему это так вне моего понимания. Значит, как уже сказали, начинай изучать основы функционирования компьютера. Биты, байты, кодировки символов и прочий ассемблер. В общем, школьный курс информатики. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 12:24 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81 но почему это так вне моего понимания. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 12:28 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Basil A. Sidorov man getchar Хотя ... Вот-вот... "хотя". Гугл прекрасно находит страницы man и разница в описании функций только в том какие функции считаются родственными. Basil A. Sidorov Есть, конечно, у меня справочник по Це тысяча девятьсот семьдесят шестого, что ли, года издания. Девять бит в байте, варианты расположения байт в слове, отличающиеся от расположения слов в двойном слове, про длину идентификаторов и вообще про всякое, но, блин, в двадцать-то первом веке ... andron81 да, в К&R написано, что char может быть и signed. в этом случае числа попадают в отрезок от -127 до 127. но когда мы объявлем переменную как просто char (без указания signed/unsigned) тут и возникают непонятки. Если для переменной целого типа не указано signed она или unsigned - она всегда signed. Это тоже стандарт со времен K&R. andron81 правильно вот и написано, что возвращенное значение это или символ (причем unsigned char, см. описание выше) или eof или ошибка. то есть eof не относят к символам всё же. это скорее состояние. ассоциировать его с символом я считаю неправильным. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 16:33 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Топик превратился в Кэролловскую "Охоту на Снарка". ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 16:42 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
andron81 правильно вот и написано, что возвращенное значение это или символ (причем unsigned char, см. описание выше) или eof или ошибка. то есть eof не относят к символам всё же. это скорее состояние. ассоциировать его с символом я считаю неправильным. RETURN VALUE fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error. ну я бы всё же перевел это иначе: или unsigned char преобразованное в целое (а это число от 0 до 255) или eof или ошибка . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 16:57 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owlsigned. Если для переменной целого типа не указано signed она или unsigned - она всегда signed. За Си не скажу, но тот, что с плюсами, нынче считает char, signed char и unsigned char тремя отдельными типами. И если диагностику компилятора немного прикрутить, то он начнёт ругаться на неявные преобразования между ними. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 17:47 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owl Ctrl+z это такая же буква как и все остальные буквы алфавита. Она может быть внутри потока байт который ты читаешь из файла или с клавиатуры. Это просто традиция овеянная веками - считать ее за EOF. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 19:01 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov За Си не скажу, но тот, что с плюсами, нынче считает char, signed char и unsigned char тремя отдельными типами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 19:05 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Давайте для чистоты эксперимента соберем две сборки. Вод Винду и Линукс и посмотри какая буква ЁП... туда лезет. Есть у меня предположение что может быть разный эффект. P.S. "Вот место для поисков Снарка" ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 19:16 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owl И поэтому от прямого использования EOF уже давно отказались. White Owl Твой оригинальный код должен был выглядеть так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Потому что getchar() вернет ноль (оно же false) как в случае реального окончания файла, так и в случае нахождения строки с единственным символом EOF. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 19:20 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
a guest White Owl И поэтому от прямого использования EOF уже давно отказались. White Owl Твой оригинальный код должен был выглядеть так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Потому что getchar() вернет ноль (оно же false) как в случае реального окончания файла, так и в случае нахождения строки с единственным символом EOF. Это пример из культового учебника по С. ТС (и автор) не виноват что спустя много лет он не компилируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 20:37 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dima T a guest пропущено... *facepalm* пропущено... Ты свой несусветный бред пробовал хотя бы раз сверять с реальностью? https://wandbox.org/permlink/Rzm67FQ6Prn59Z9U Это пример из культового учебника по С. ТС (и автор) не виноват что спустя много лет он не компилируется. Из какого ? если вы имеете ввиду K&R , то там таких примеров нет. там все примеры с завершением цикла по eof ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 20:53 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dima T ТС (и автор) не виноват что спустя много лет он не компилируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 21:09 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Barlone getchar() возвращает int, не char. И EOF - это целое число, не совпадающее ни с одним возможным значение char. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 21:38 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 22:06 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Barlonegetchar() возвращает int, не char. Вообще-то по-жизни (то есть изначально) она возвращала именно char.Изначально — это какой год? Dimitry Sibiryakov В int её перековали относительно недавно, когда внезапно обнаружилась буква "я" в кодировке Windows-1251. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 23:03 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
a guestgetchar возвращает int уже в первом издании K&R C, в 1978 году. Ах, вот оно как. Ну, значит, я ошибался. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2020, 00:46 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owl Берешь например семейство процессоров ARM Если я достиг вершин мастерства в своей области, то об этом надо сообщить всем. Даже тем, кому до этого мастерства ещё пилить и пилить, да и область у них совершенно другая. Ну, что ж - тоже вариант ... P.S. Нахрена топикстартеру знать про ARM, если для него signed/unsigned - тёмный лес? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2020, 05:40 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Нет в Це байтов addressable unit of data storage large enough to hold any member of the basic character set of the execution environment ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2020, 07:32 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
a guest ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2020, 10:13 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Basil A. Sidorov a guest пропущено... K&R pp12-13C provides several other data types besides int and float, including: charcharacter - a single byteshortshort integerlonglong integerdoubledouble-precision floating point The size of these objects is also machine-dependent. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2020, 15:21 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White OwlK&R pp12-13Повторю для особо непонятливых - речь шла об имени типа, а не о том, чему он соответствует. Считаете, что формулировка была неудачной - можно обсудить отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2020, 16:01 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
White Owl andron81 пропущено... Почему так уж разразились критикой? Можете прокомментировать? Поэтому заявлять что "getchar() возвращает int, не char." и делать из этого выводы не особо полезно. Во вторых, если почитать конкретно документацию на getchar() то мы увидим: man getcharRETURN VALUE fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error. "И EOF - это целое число, не совпадающее ни с одним возможным значение char." Угу... открываем stdlib.h и видим там строку: Код: plaintext 1.
Это очень сильно не совпадает с возможными значениями char.... Ага, ага. Ну и никто же не запрещает сделать: Код: plaintext 1.
И да, если у тебя консоль работает в CP1251, то %c ты получишь букву "я" (строчная 33-я буква кириллицы). Потому что CP1251 ее код 255, что в случае однобайтного целого так-же кодирует и -1. Вообще, когда пишешь на Си, очень полезно понимать как работает компьютер. Если для вас язык это что-то такое волшебное и мистическое - успеха не будет совсем. Для С++ это тоже будет полезным, но в меньшей степени. И чем более "высокий" язык, тем допустимая степень волшебности выше, для успешного написания программы.Ну то, что каст EOF к char дает какой-то символ совсем неудивительно. Сколько бы ни было возможных значений int, кастуя из в char, мы всегда получим один из 256 символов. А вот в обратную сторону... Сами же цитируете "return the character read as an unsigned char cast to an int" и это легко проверяется - символ возвращается как 255, а EOF -1 А что sizeof(int) >= sizeof(char) - ну равенство там скорее гипотетическое. Разве что в каком-нибудь суровом embedded с четырехбитным процессором и 128 байтами озу... Но там и со стандартной библиотекой плохо будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2020, 21:01 |
|
как все же отловить eof
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Компилируем, подсовываем через перенаправление "<" на вход файл c той самой буквой 'я' и видим, что буква=255, а EOF=-1 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2020, 21:21 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017453]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 160ms |
0 / 0 |