انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: masoudk در 29 دی 1392، 02:22 بظ
-
سلام، من تو یک مشکل ساده و ابتدایی گیر کردم ;D
این کد باید برای بررسی اینکه ورودی عدد هست درست کار کنه:
int getInt ()
{
int i;
while (!(cin >> i))
{
cout << "Please enter an integer: ";
cin.clear();
}
return i;
}
ولی اگه کاراکتر وارد کنی تو یه حلقه بی نهایت میافته و همش پشت سر هم مینویسه "Please enter an integer: "
یعنی دیگه توی cin منتظر وارد شدن ورودی نمیمونه. کسی میدونه چرا؟ ;D
-
سلام، من تو یک مشکل ساده و ابتدایی گیر کردم ;D
این کد باید برای بررسی اینکه ورودی عدد هست درست کار کنه:
int getInt ()
{
int i;
while (!(cin >> i))
{
cout << "Please enter an integer: ";
cin.clear();
}
return i;
}
ولی اگه کاراکتر وارد کنی تو یه حلقه بی نهایت میافته و همش پشت سر هم مینویسه "Please enter an integer: "
یعنی دیگه توی cin منتظر وارد شدن ورودی نمیمونه. کسی میدونه چرا؟ ;D
cin.clear فقط خطای cin رو پاک میکنه و به خط بعد نمیره. بنابراین همون مقدار حرفی رو پشت سر هم دریافت میکنه. برای رد مشکل
cin.ignore(10000, '\n');
رو بعد از cin.clear بزار.
-
مرسی، درست شد :)
اگه بخوایم کامل بافر خالی بشه، مثل شرایط الان من، میتونیم cin.ignore() خالی رو هم بنویسیم.
-
مرسی، درست شد :)
اگه بخوایم کامل بافر خالی بشه، مثل شرایط الان من، میتونیم cin.ignore() خالی رو هم بنویسیم.
نه بافر خالی نمیشه. مثلن ورودی رو
A B C 10
بدید و ببینید چی میشه.
-
بله بازم حق با شماست ;D
اگه مشخص نکنیم ignore تا وقتی که به space برسه discard میکنه، یعنی با مثال A B C 10 سه تا حلقه طول میکشه بافر خالی بشه. ;D
مرسی، خیلی لطف کردید
-
http://www.cprogramming.com/fod/isdigit.html
-
http://www.cprogramming.com/fod/isdigit.html
اینکه یک کاراکتر رو میگیره و چک میکنه 0-9 هست یا نه. چطور میشه با این روش این مسئله رو حل کرد؟
فکر کنم اگر متغیر رو string تعریف کنیم و بعد تک تک کاراکترها رو با این تابع چک کنیم مسئله حل میشه. درست میگم؟ :)
-
یا رشته یا آرایه ای از کاراکترها