سلام دوست عزيز
خوب دوست عزيز من تبريك ميگم بهتون كه به سي ++ علاقه مند شديد و شروع به ياد گيري كرديد!! مطمئن باشيد كه بنده و دوستان و اساتيد محترم هر چقدر كه بتونيم كمكتون خواهيم كرد!!
حالا در مورد اين مسئله بنده توضيحاتي عرض مي كنم كه اميدوارم جواب سوالاتتون رو بگيريد!!
** كاري كه اين برنامه انجام ميده اينه كه يه عدد رو از كاربر ميگيره و اون رو به طور برعكس چاپ مي كنه و اين كار رو تا بينهايت انجام ميده!! يعني چي!؟ يعني بعد از نمايش عكس يك عدد، عدد بعدي رو ميگيره و همين كار رو تكرار مي كنه!! در واقع يعني برنامه پاياني نداره!!
( مگر اينكه كاربر دستي برنامه رو ببنده!!
)
** بنابراين در اين برنامه از دو حلقه استفاده شده كه يكي برايه تكرار برنامه مي باشد كه همان حلقه
while(1){
}//end of while(1)
مي باشد! اين حلقه دارايه يك شرط شروع مي باشد كه در اينجا برابر 1 مي باشد!! اين بدين معني است كه هميشه شرط حلقه true مي باشد و حلقه هميشه اجرا مي شود!!( در اصطلاح حلقه بينهايت مي باشد!!)
و حلقه ديگر برايه انجام عمل مربوط به برنامه مي باشد كه همان حلقه
do{
}while(num!=0)
مي باشد!! اين حلقه نيز دارايه يك شرط خاتمه مي باشد كه در اينجا num!=0 مي باشد!!
**تفاوت اين دو نوع while تنها در اين مي باشد كه حلقه do...while هميشه حداقل يكبار اجرا ميشود!! يعني حتي اگر شرط حلقه false باشد اين حلقه يكبار اجرا مي شود ولي حلقه while در صورت غلط بودن شرط اجرا نخواهد شد!!
**در مورد تابع getch هم بايد بگم كه دليل استفاده آن در پايان هر برنامه تنها برايه آن است كه برنامه بشته نشده و بتوان خروجي را مشهاده كرد!! اما در اين برنامه چون بعد از اتمام عمليات عدد بعدي گرفته مي شود و برنامه بشته نمي شود مي توان خروجي را ديد پس نيازي به اين تابع نمي باشد!! 
** در مورد return 0 هم احتمالا چون برنامه خاتمه نخواهد يافت آن را در توضيحات آورده اند!!
ولي منطقي نيست و احتمالا برنامه موقع كامپايل يه warning در اين مورد نشان ميدهد!!
موفق باشيد