powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / как все же отловить eof
13 сообщений из 63, страница 3 из 3
как все же отловить eof
    #39946763
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
a guest
пропущено...
*facepalm*
пропущено...
Ты свой несусветный бред пробовал хотя бы раз сверять с реальностью? https://wandbox.org/permlink/Rzm67FQ6Prn59Z9U

Это пример из культового учебника по С. ТС (и автор) не виноват что спустя много лет он не компилируется.


Из какого ? если вы имеете ввиду K&R , то там таких примеров нет. там все примеры с завершением цикла по eof
...
Рейтинг: 0 / 0
как все же отловить eof
    #39946766
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
ТС (и автор) не виноват что спустя много лет он не компилируется.
У ТС с кодом всё ок. И при чём тут "не компилируется"?
...
Рейтинг: 0 / 0
как все же отловить eof
    #39946773
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barlone
getchar() возвращает int, не char. И EOF - это целое число, не совпадающее ни с одним возможным значение char.
Более корректно было бы сказать "не совпадающее ни с одним возможным значением unsigned char".
...
Рейтинг: 0 / 0
как все же отловить eof
    #39946778
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#include <stdio.h>
#define EOF -101

int main() {
    char c;
    for(c=0; c != EOF; c++);
    printf("%d: %c\n", c, c);
}
...
Рейтинг: 0 / 0
как все же отловить eof
    #39946791
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Barlonegetchar() возвращает int, не char.

Вообще-то по-жизни (то есть изначально) она возвращала именно char.Изначально — это какой год?
Dimitry Sibiryakov
В int её перековали относительно недавно, когда внезапно обнаружилась буква "я" в кодировке Windows-1251.
getchar возвращает int уже в первом издании K&R C, в 1978 году. Где 1978 и где Windows-1251. Ты из дурки вещаешь, что ли?
...
Рейтинг: 0 / 0
как все же отловить eof
    #39946807
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guestgetchar возвращает int уже в первом издании K&R C, в 1978 году.

Ах, вот оно как. Ну, значит, я ошибался.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как все же отловить eof
    #39946826
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Берешь например семейство процессоров ARM
Понял.
Если я достиг вершин мастерства в своей области, то об этом надо сообщить всем. Даже тем, кому до этого мастерства ещё пилить и пилить, да и область у них совершенно другая. Ну, что ж - тоже вариант ...

P.S.
Нахрена топикстартеру знать про ARM, если для него signed/unsigned - тёмный лес?
...
Рейтинг: 0 / 0
как все же отловить eof
    #39946834
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
Нет в Це байтов
http://port70.net/~nsz/c/c11/n1570.html#3.6p1 byte
addressable unit of data storage large enough to hold any member of the basic character set of the execution environment
...
Рейтинг: 0 / 0
как все же отловить eof
    #39946872
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая связь между определением "минимально адресуемая область памяти" и "тип языка программирования"?
...
Рейтинг: 0 / 0
как все же отловить eof
    #39947008
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
как все же отловить eof
    #39947033
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlK&R pp12-13Повторю для особо непонятливых - речь шла об имени типа, а не о том, чему он соответствует.
Считаете, что формулировка была неудачной - можно обсудить отдельно.
...
Рейтинг: 0 / 0
как все же отловить eof
    #39948216
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
andron81
пропущено...


Почему так уж разразились критикой?
Можете прокомментировать?
Ну начать можно с того, что int и char это практически одно и то-же, отличающееся всего-лишь размером. Причем только возможно отличающиеся. По стандарту (и это есть в K&R) и то и другое это целые числа при этом количество байт отданных под int больше или равно количеству байт отданных под char. sizeof(int) >= sizeof(char)
Поэтому заявлять что "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.
#define EOF (-1)

Это очень сильно не совпадает с возможными значениями char.... Ага, ага.
Ну и никто же не запрещает сделать:
Код: plaintext
1.
printf("%d %i %c\n", EOF, EOF, EOF);

И да, если у тебя консоль работает в 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 байтами озу... Но там и со стандартной библиотекой плохо будет.
...
Рейтинг: 0 / 0
как все же отловить eof
    #39948219
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#include <stdio.h> 
int main()
{
    int c;
    do {
        c = getchar();
        printf("%d ", c);
    } while (c  != EOF);
    return 0;
}

Компилируем, подсовываем через перенаправление "<" на вход файл c той самой буквой 'я' и видим, что буква=255, а EOF=-1
...
Рейтинг: 0 / 0
13 сообщений из 63, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / как все же отловить eof
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]