PDA

View Full Version : سوال: دلیل جواب غیر منتظره در برنامه اسکی؟



شسیشسی
یک شنبه 24 بهمن 1400, 22:56 عصر
سلام
من یک برنامه نویشتم که یک کاراکتر را دریافت می کند و کد مبنای 16 آن را بدست می آورد و این کار را هم درست انجام می دهد ولی بعد از هر جواب یک a چاپ می کند و من هم نمی دانم دلیل کار او چیست.
شما می دانید چرا؟


//ASCII.c
main()
{
char b;
while(1)
{
scanf("%c",&b);
printf("%x\n",b);
}
}






153695

n07im3
شنبه 17 اردیبهشت 1401, 01:58 صبح
سلام
من یک برنامه نویشتم که یک کاراکتر را دریافت می کند و کد مبنای 16 آن را بدست می آورد و این کار را هم درست انجام می دهد ولی بعد از هر جواب یک a چاپ می کند و من هم نمی دانم دلیل کار او چیست.
شما می دانید چرا؟


//ASCII.c
main()
{
char b;
while(1)
{
scanf("%c",&b);
printf("%x\n",b);
}
}




دلیل این است که تابع scanf بعد از خواندن کاراکتر موردنظر بافر ورودی را ‍‍‍‍‍‍پاک نمی کند و در تکرار بعدی حلقه کد اسکی کلید Enter که برابر با 10 است را خوانده که بلافاصله چاپ می شود ( در مبنای ۱۶ مساوی است با a ) .
برای حل این مشکل چند راه وجود دارد، یکی افزودن یک scanf("%c"); بعد از دریافت ورودی و دیگری اضافه کردن یک فاصله یا space درون رشته فرمت تابع، بصورت زیر:

scanf(" %c",&b);