Начало апреля 1945 года. Рассказчик, мальчик по имени Коля, живёт в небольшом тыловом городе вместе с мамой и бабушкой. Отец Коли на фронте. Мама работает медсестрой в госпитале, а сам мальчик учится в третьем классе.
Мама и бабушка стараются уберечь Колю от голода и прочих превратностей войны. Война подходит к концу, но еды не хватает, и мальчик постоянно голоден. Младшим классам школы выдают талоны на доппитание. Талонов на всех не хватает, и дети ходят в столовую по очереди. Колина очередь подходит в первый день после каникул.
Восьмая столовка, в которую Коле предстоит ходить, представляется мальчику райскими кущами с люстрами и фикусами. На самом деле столовая оказывается огромным и холодным залом, полным детей со всех школ города. Коля садится за стол рядом с двумя «гладкими пацанами» которые едят играя, наперегонки. Остатки хлеба они отдают вездесущим воробьям, чтобы не оставлять их шакалам.
Кто такие шакалы, Коля узнаёт на следующий день. Чтобы не встречаться с «гладкими», он приходит в столовую позже и уже заканчивает обед, когда перед ним появляется незнакомый мальчишка с жёлтым лицом и просит у Коли остатки ненавистного овсяного супа. Оторопев, он отдаёт суп, а какая-то девочка постарше делится своей порцией с младшей сестрой мальчишки. Коля понимает, что это и есть шакалы — голодающие дети, которые побираются в школьных столовках.
На следующий день Коля приходит в восьмую столовку рано из-за отменённой физкультуры. У него в портфеле лежит кусок хлеба, который мальчик стянул из буфета накануне вечером. В длиннейшую очередь, прямо перед Колей, вклинивается компания наглых и рослых пацанов во главе с носатым парнем. От шайки несёт табаком и «какой-то грубой и злой силой, с которой даже взрослые предпочитали не связываться».
Я не завидовал таким шайкам, их тогда было много, чуть не в каждом дворе или даже классе — там царили неправедные законы, зло и несправедливость.
Коля начинает высматривать желтолицего мальчика, но видит других шакалов, более наглых — они крадут еду с подносов. Соседка по столу рассказывает Коле, что такие шакалы могут отнять не только хлеб, но и тарелку с супом или котлетой. В этот момент Коля видит желтолицего. На этот раз он тоже берёт хлеб без разрешения. Обворованная девчонка начинает реветь, поднимается гвалт, и желтолицый успевает выскочить на улицу.
Коля слышит, как шайка носатого договаривается проучить шакала. Он выскакивает вслед за пацанами, которые уже напали на желтолицего. Тот принимает удары «с каким-то непонятным ‹…› смирением», а потом хватает носатого главаря за горло. Шайка не может вырвать главаря из его мёртвой хватки, желтолицый сам отпускает полузадушенного пацана, и шайка трусливо улепётывает.
Израсходовав в драке последние силы, желтолицый мальчик теряет сознание. Коля мчится за помощью к гардеробщице, и та отпаивает желтолицего сладким чаем. Он признаётся женщине, что не ел пять дней.
Коля знакомится с Вадькой, который старше мальчика на три класса, и его младшей сестрёнкой Марьей. Он узнаёт, что дети были эвакуированы из Минска в тыл недавно. Их отец погиб в начале войны, а мать сразу после приезда заболела тифом и попала в тифозный барак. Деньги и талоны на продукты Марья потеряла, и теперь дети выживают, как могут. Чтобы не расстраивать больную мать, дети каждый день пишут ей бодрые и оптимистичные письма, в которых нет ни слова правды.
Колю непреодолимо, как магнитом, тянет к Вадьке. Он чувствует, что его новый друг отличается от всех остальных людей, даже от взрослых.
Свобода, дарованная для сражения с голодом, самостоятельность, полученная для того, чтобы не помереть, выглядели иначе.
Вадим просит Колю одолжить ему до лета какую-нибудь куртку. Своё пальто, тёплое и добротное, он хочет продать, чтобы как-то прокормиться до начала месяца и новых продуктовых карточек.
Колина мама застаёт ребят во дворе, когда Вадим примеряет куртку, слишком тонкую для ранней весны. Коля рассказывает ей о несчастьях Вадика и Марьи. Женщина приводит их домой, сытно кормит и укладывает спать. Осмотрев тетради детей, Колина мама узнаёт их фамилию — Русаковы — и решает им помочь. На следующий день она звонит в школы, где учатся брат с сестрой, и сообщает об их бедственном положении. Коля об этом не знает — он просил всё хранить в тайне, чтобы не расстроить маму Русаковых.
На следующий день Коля прогуливает школу. Всё утро он вместе с Вадимом ходит по городу в поисках еды — не по годам взрослый мальчик не хочет сидеть на шее у чужих людей.
Это бывает часто, во все времена ‹…› мальчишка помладше, точно верный оруженосец, готов следовать за мальчишкой, который едва старше его.
Оказывается, Вадик знает все «хлебные» места города. Коля понимает, что шакалит он не первую неделю. По дороге Вадим рассказывает о шпане, которая отнимает в столовых еду, угрожая ножом. Затем ребята заходят в комнату под лестницей трёхэтажной коммуналки, которую выделили эвакуированным Русаковым. Такой убогой комнаты Коля не видел никогда. Постельное бельё сожгли из-за тифа, а окна так и остались заклеенными бумагой крест-накрест. После гибели мужа Вадькина мама живёт как во сне, поэтому Вадим так за неё боится.
В тот день Коля решает разделить с Вадиком свой обед в восьмой столовке. Возле столовой их догоняет Марья и сообщает, что школа выделила для них талоны на спецпитание, директор пообещал новые продуктовые карточки, а учителя собрали немного денег.
В столовой Марья получает обед первой, но вскоре лишается второго блюда — котлет. Их отнимает «парень с лицом, похожим на тыкву». Вооружившись подносом, Вадим заступается за сестру, несмотря на острую бритву в руке шакала. Вор убегает, оставив недоеденную котлету. Ребята не смотрят на неё, хотя ещё вчера доели бы не раздумывая.
Выходит, — подумал я, — когда голод отступает, человек сразу становится другим? Но кто и кем тогда правит? Голод человеком? Человек голодом?
«Тыквенный парень» подкарауливает Вадима у входа в столовку и лезвием портит его пальто. Вадим расстроен — теперь он не сможет его продать.
Ребята расстаются — Вадим отправляется в школу, а Коля и Марья сочиняют письмо и относят его в страшный тифозный барак. По дороге Марья рассказывает, как они с братом выживали после потери карточек, и как стыдно поначалу выпрашивать еду в столовке. Только потом «голод убивает всякий стыд».
Вечером Колю ожидают три события. Сначала Вадик приходит из школы ошеломлённый — учителя собрали для брата и сестры целый портфель продуктов. Колина мама уверяет, что она здесь ни при чём. Второе событие — рассказ Марьи о том, как она с братом ходила в баню. Вадик не отпустил сестрёнку одну, девочка могла ошпариться, и Марье пришлось мыться в мужском отделении. С тех пор Марье стыдно ходить в баню.
Третьим событием оказывается нагоняй, который устраивает Коле мама, узнавшая, что сын прогулял школу. Коля пытается объяснить, что помогал Вадиму искать еду, но мама ничего не хочет слушать. Она решает, что Вадим плохо влияет на её сына. Коля возмущается, в его отношении к маме, всегда такой сильной и мудрой, «ломается какая-то тонкая перегородочка».
Хрупкая, ломкая это вещь — душа детская. Ох, как беречь надо бы её, ох, как надо!..
После этого нагоняя Коля «дрогнул духом», дружбы у него с Вадиком не получается — выходит лишь знакомство.
В течение всей весны Колина мама передаёт Вадиму, что больная из тифозного барака чувствует себя неплохо. Восьмого мая она приходит с работы расстроенная и в слезах. Коля пугается — вдруг сейчас, накануне победы, что-то случилось с папой. Собрав небольшой гостинец, мама вместе с Колей отправляется к Русаковым и там ведёт себя суетливо и беспокойно.
На следующий день, 9 мая, весь город празднует День Победы. Директриса школы поздравляет детей, а учительница просит запомнить всё пережитое, ведь они, дети войны, станут последними, кто сохранит эти воспоминания. Они должны сохранить «наше горе, нашу радость, наши слёзы» и передать эту память своим детям и внукам.
Потолкавшись после уроков в праздничной толпе, Коля отправляется к Вадиму и узнаёт, что его мама умерла несколько дней назад. Колина мама узнала об этом только вчера, поэтому и вела себя так странно. Слушая Вадима, Коля чувствует, как между ними «раскрывается чёрная вода», словно они с Марьей уплывают куда-то, а он, Коля, остаётся на берегу. Вадим сообщает, что их с Марьей отправят в детский дом, и просит Колю уйти.
Марья всё лежала, всё спала каким-то ненастоящим, сказочным сном, только вот сказка была недобрая, не о спящей царевне. Без всяких надежд была эта сказка.
Ещё один раз, последний, Коля встречается с Вадимом в конце лета. «Враз подросший, неулыбчивый парень» сообщает, что их детский дом уезжает.
Осенью Коля переходит в следующий класс, и ему снова выделяют талоны на доппитание. В восьмой столовке к нему снова подходит голодный мальчишка, и Коля делится с ним своей порцией.