f.f.o. :: /add |
Александр Фенстер |
add@fenster.name | fenster.name |
И вот одна из них. Пришлось мне в этом году принимать зачёт на первом курсе ФИТа у всего потока (60+ человек). Понятно, что когда студентов много, а я один, зачёт является некоторой формальностью: нельзя же за несколько минут заглянуть человеку прямо в душу и понять, действительно ли он выучил Си или умело притворяется. Задаю пару вопросов, даю пару простых задачек и отпускаю студента, если он адекватно отвечает, с автографом в зачётке. А из формальностей — необходимость сдать одиннадцать «пятиминуток», которые (по идее) пишутся прямо в конце лекции, но если пропустил занятие или написал чушь — надо сделать и сдать.
Вот сдаёт, значит, девушка одну такую пятиминутку. На листочке (хотя разрешено было долги высылать по email)
написана программа на Си, функция main
которой выглядит ровно следующим образом:
int main()
{
f(1);
getchar();
getchar();
}
Забудем даже про отсутствие return 0
в конце, речь не о нём. Речь о гетчарах.
Практика ставить один (не два!) вызов getchar()
в конце программы сложилась у нерадивых
студентов, которые в Visual Studio запускают программу кнопкой F5 (режим отладки). При этом окошко
программы закрывается сразу после выполнения, и посмотреть, что программа напечатала, не удаётся.
Правильное решение проблемы — запускать программу при помощи Ctrl+F5, тогда после окончания
работы программы появится надпись Press any key to continue и окно не закроется, пока эникей не нажат.
Ну либо вообще работать в линуксе, где такая проблема вообще не возникает.
Однако правильное решение некоторым студентам неизвестно или кажется слишком сложным, поэтому они
втыкают в конце программы getchar()
, требуя тем самым от пользователя нажать Enter перед
автоматическим закрытием окошка.
Но в нашем случае есть целых две проблемы. Во-первых, гетчара два. Во-вторых, программа написана
ручкой на листочке. Я никогда не видел человека, который при написании программы ручкой на листочке
заботился бы о том, чтобы если написанная программа будет запущена кнопкой F5, пользователь увидел бы
результат вычисления и нажал бы Enter для закрытия окошка. Причём для гарантии (а вдруг не сработает,
на листочке-то!) вызов getchar()
лучше повторить, чтобы уж точно не ошибиться.
Спросил громко у студентки, зачем ей на листочке два гетчара. Аудитория посмеялась, но девушка не смутилась и попыталась придумать какое-то сбивчивое объяснение — я помню что-то про «чтобы файл закрылся» и какой-то ещё бред из этой же серии. Казалось, можно смело говорить классическое «ну вот, списали программу и не разобрались», но захотелось поставить следственный эксперимент.
Взял у другого студента ноутбук со студией и предложил студентке написать там Hello World.
Она написала программу, причём безо всяких getchar()
, и совершенно машинально
запустила её, нажав Ctrl+F5. Из чего следует, что привычки нажимать F5 и писать в конце getchar
у неё нет в принципе. О чём она думала, когда переписывала эти строчки, остаётся непонятным.
Зачёт, кстати, в итоге всё равно поставил.