1 ضمیمه
دلیل جواب غیر منتظره در برنامه اسکی؟
سلام
من یک برنامه نویشتم که یک کاراکتر را دریافت می کند و کد مبنای 16 آن را بدست می آورد و این کار را هم درست انجام می دهد ولی بعد از هر جواب یک a چاپ می کند و من هم نمی دانم دلیل کار او چیست.
شما می دانید چرا؟
//ASCII.c
main()
{
char b;
while(1)
{
scanf("%c",&b);
printf("%x\n",b);
}
}
ضمیمه 153695
نقل قول: دلیل جواب غیر منتظره در برنامه اسکی؟
نقل قول:
نوشته شده توسط
شسیشسی
سلام
من یک برنامه نویشتم که یک کاراکتر را دریافت می کند و کد مبنای 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);