Код: Выделить всё
#include <stdio.h>
int main () {
int a;
a= getchar ();
while (a!= EOF) {
putchar (a);
a= getchar ();
}
return 0;
}На её описании останавливаться не буду- оно есть у Кернигана и Ричи, есть у Кочана, да может, ещё где. Итак, переменным типа int возможно присваивать значение типа char, "...хотя это и нельзя считать хорошим стилем программирования" (Cтефан Кочан). Я это прочёл: если нельзя, но очень хочется, то можно. Хорошо. Но ведь и эта программа работает тоже:
Код: Выделить всё
#include <stdio.h>
int main () {
char i;
i= 116;
printf ("%c\n", i);
return 0;
}На этот раз переменной типа char присваивается значение типа int. И небезуспешно- программа преспокойно выводит t.
Друзья! Для чего вообще нужна типизация данных? Да для того, чтобы такие ситуации пресекать. Чтобы нельзя было к букве прибавить число. Чтобы нельзя было число прочитать как символ. И машина должна выдавать сообщение об ошибке.
Получается, лазейки в синтаксисе придуманы с одной целью- чтобы можно было число, соответствующее EOF cравнить с числом, cоответствующим вводимому символу. -1 т. е. сравнить, допустим со 116 (если вводится символ t)
Ну и совсем уже наивный вопрос: а что, нельзя было сделать так, чтобы число, соответствующее EOF равнялось не -1, а, допустим 254? В конце кодовой таблицы какие-то знаки ненужные, а если конец файла такой нужный, потеснить бы их и его туда впихать. Тогда код номер один приобрёл бы видr
Код: Выделить всё
#include <stdio.h>
int main () {
char a;
a= getchar ();
while (a!= EOF) {
putchar (a);
a= getchar ();
}
return 0;
}И порядок был бы соблюдён- вводим символы и присваиваем эти значения переменным соответствующего типа.
Может, не прав но вакханалию эту терпеть не могу больше.
