PDA

View Full Version : پاك كردن اطلاعات بافر



asrin|\|
چهارشنبه 16 تیر 1389, 14:07 عصر
سلام
تابع getchar من كار نميكنه!از صفحه كنسول چيزي را دريافت نميكنه.فكر كنم با دستوري بايد اول اطلاعات بافر اون رو پاك كنم ...كسي ميدونه دستورش چيه؟؟مرسي.

...StacK...
چهارشنبه 16 تیر 1389, 15:23 عصر
دو بار از همین دستور استفاده کن.

asrin|\|
چهارشنبه 16 تیر 1389, 15:51 عصر
نميتونم اين كارو بكنم آخه كدم به هم مي ريزه!مي دونم كه يه دستور خاص براي اين كار هست..

tdkhakpur
چهارشنبه 16 تیر 1389, 22:16 عصر
تابع getchar من كار نميكنه!از صفحه كنسول چيزي را دريافت نميكنه

بستگی دارد کدام یک از کلید ها را بزنید اگر کلید معمولی را فشار بدید همین یکی کافیه ولی اگر از کلیدهای توسعه یافته استفاده کنید مجبورید برای بار دوم برای پیدا کردن کد توسع یافته همین getchar را اجرا کنید.

asrin|\|
پنج شنبه 17 تیر 1389, 12:41 عصر
بستگی دارد کدام یک از کلید ها را بزنید اگر کلید معمولی را فشار بدید همین یکی کافیه ولی اگر از کلیدهای توسعه یافته استفاده کنید مجبورید برای بار دوم برای پیدا کردن کد توسع یافته همین getchar را اجرا کنید.
برنامه طوريه كه معلوم نيست كاربر چه كليدي را وارد ميكنه به خاطر همينه كه مي گم برنامه به هم مي ريزه!

a.gh.n
پنج شنبه 17 تیر 1389, 13:39 عصر
قبلا اطلاعات دیگه ای رو هم می خونه؟ در این صورت کد اون قسمت رو بذارید. احتمالا یک n\ رو قبلا خونده... توابع C (برخلاف توابع Cpp) معمولا کراکتر n\ رو نادیده نمی گیرن. مشکل با یه حلقه حل می شه. اون حلقه چیزی شبیه این می تونه باشه:

do {} while(getchar()!='\n');
از این حلقه باید قبل از خوندن کراکتر جدید استفاده کنی تا از شر n\ خلاص شی. getchar بعدی که صدا شه بافر خالیه.

asrin|\|
شنبه 19 تیر 1389, 19:42 عصر
اين كاري كه ميگي دقيقا براي همين كد جواب نميده!


int Count;
cin>>Count;
vector<int> value(0);

int x,len;
char c;
c=getchar();
for(int i=0;i<Count; i++)
{

c=getchar();
while(c!='\n')
{
x=c-48;
c=getchar();
value.push_back(x);
}
Eleven(value,Count);
}

درست مي گم؟؟

a.gh.n
شنبه 19 تیر 1389, 22:59 عصر
نه. نمی دونم چه جذابیتی داره که از cin و getchar تواما" استفاده می شه.... بگذریم.
از کدتون سر در نیوردم. ظاهرا می خوای معادل int کراکتر ها رو پیدا کنی ولی کار حلقه ی while رو نفهمیدم. به هر حال getchar هایی که نادیده گرفته می شن دقیقا به خاطر دلیلی که گفتم عمل می کنن.


int Count;
cin>>Count;
vector<int> value(0);

int x,len;
char c;

//NEXT getchar() DONT READ ANYTHING NEW, SO ADD THIS LINE:
do {} while (getchar()!='\n');
c=getchar();

for(int i=0;i<Count; i++)
{
//NEXT GETCHAR DONT READ ANYTHING NEW, SO ADD THIS LINE:
do {} while (getchar()!='\n');
c=getchar();
while(c!='\n')
{
x=c-48;
c=getchar();
do {} while (getchar()!='\n');
value.push_back(x);
....
}

اولین getchar که کامنت گذشتم، اصلا موجب پرامپ نمی شه. شایدم خواستی بافر رو خالی کنی... به همین ترتیب برای بقیه.

asrin|\|
یک شنبه 20 تیر 1389, 15:29 عصر
اصلا لازم نيست كه بدونيد اين كد چيكار مي كنه! دليل اينكه هم از cinو هم از getcharاستفاده كردم اينه كه با cin فقط مي شه يه نوع داده ي فوقش 8 بايتي رو ذخيره كرد ولي با getchar ميشه تا هر تعداد عدد رو از صفحه كليد دريافت كرد و بعد در قالبي مناسب ذخيره كرد ،كه توي اين كد چون اعداد ورودي خيلي بزرگ بودند اعداد رو بغد از دريافت داخل vector ذخيره مي كنم.
حلقه ي while كه به كد اضافه كرديد مشكل رو تا حدودي حل مي كنه ولي همون طوري كه گفتم تابعي تو cهست كه اطلاعات بافر رو پاك ميكنه...

a.gh.n
یک شنبه 20 تیر 1389, 18:41 عصر
احتمالا منظورتون fflush هست، برای input stream استفاده از fflush مفید نیست. مسئله مشکلی هست که ممکنه برای OS بوجود بیاد (چون مثلا یک Stdin داریم و برنامه های مختلفی در حال ورودی گرفتن هستن) و کمپایلر آزاده هر کاری که می خواد انجام بده، چون در استاندردهای C گفته نشده fflush روی input stream چی کار کنه.