PDA

View Full Version : سوال: چگونه با دستور cin فقط قسمت صحیح یک عدد اعشاری رو ذخیره کنم ؟



iman_n21
جمعه 07 آذر 1393, 11:10 صبح
سلام
لطفا راهنمایی کنید چکار کنم که اگر کابر برای x بجای عدد صحیح عدد اعشاری وارد کرد ،دستور cin فقط قسمت صحیح رو ذخیره کنه و قسمت اعشاری رو بافر نکنه برای y ؟
علت این مشکل رو هم بفرمایید
ممنون





int main()
{
int x;
int y;


cin>>x;
cin>>y;


cout<<endl<<"x*y="<<x*y;
return x-x;
}

parvizwpf
جمعه 07 آذر 1393, 11:34 صبح
Int که اعشاری نمیگیره

parvizwpf
جمعه 07 آذر 1393, 11:34 صبح
http://stackoverflow.com/questions/3923202/set-the-digits-after-decimal-point

rahnema1
جمعه 07 آذر 1393, 13:27 عصر
سلام
می تونید این طور عمل کنید

#include <iostream>
#include <sstream>
using namespace std;
int main()
{
int x;
int y;
string str;
cin >> str; stringstream(str) >> x;
cin >> str; stringstream(str) >> y;
cout<<endl<<"x*y="<<x*y;
return x-x;
}

iman_n21
جمعه 07 آذر 1393, 21:44 عصر
ممکنه یه مقدار در مورد کد بالا توضیح بدید ؟ و اینکه علت بوجود اومدن این مشکل کلا چی هست ؟ یعنی چرا cin مثل وقتی که متغیری از نوع صحیح تعریف میکنیم ولی مقدار اعشاری بهش میدیم نمیاد بخش اعشار رو کلا حذف کنه ؟



int x=5.5;
cout<<x;


return 0;

rahnema1
شنبه 08 آذر 1393, 01:45 صبح
ممکنه یه مقدار در مورد کد بالا توضیح بدید ؟ و اینکه علت بوجود اومدن این مشکل کلا چی هست ؟ یعنی چرا cin مثل وقتی که متغیری از نوع صحیح تعریف میکنیم ولی مقدار اعشاری بهش میدیم نمیاد بخش اعشار رو کلا حذف کنه ؟



int x=5.5;
cout<<x;


return 0;




علتش اینه که واسش اینطور تعریف شده که فقط عدد صحیح بگیره اگر کاراکتر دیگه ای گرفت دچار خطا میشه و باید ابتدا فلگهای خطای cin را پاک کنیم بعد کاراکتری که باعث شده خطا به وجود بیاد بکشیم بیرون که این روش در سایت زیر توضیح داده شده
http://msdn.microsoft.com/en-us/library/71t65ya2.aspx
اما stringstream هم کارش مثل cin هست فقط به چای ورودی استاندارد، اطلاعات را از رشته می خونه و داخل x می ریزه اگرچه مانند cin دچار خطا میشه اما اگه دقت کرده باشید هر دفعه یک stringstream جدا درست می کنیم که خطای قبلی در بعدی تاثیر نذاره

iman_n21
دوشنبه 10 آذر 1393, 16:07 عصر
راه دیگه ای هم بجز روش بالا هست ؟
از دستورات تغییر نوع داده ای میشه اینجا استفاده کرد ؟

rahnema1
دوشنبه 10 آذر 1393, 19:44 عصر
راه دیگه ای هم بجز روش بالا هست ؟
از دستورات تغییر نوع داده ای میشه اینجا استفاده کرد ؟
تغییر چه چیزی؟
در هر صورت روشهای بالا را به این دو صورت می شه در آورد

#include <iostream>
namespace mystd
{
class mystream
{
public:
template <class T>
mystream& operator>>(T& t)
{
std::cin >> t;
while(std::cin.fail())
{
std::cin.clear();
std::string str;
std::cin >> srt;
std::cin >> t;
}
return *this;
}

} cin;
}
int main()
{
int x;
int y;
mystd::cin >> x >> y;
std::cout<< std::endl<< "x*y=" << x * y;
return x - x;
}


یا


#include <iostream>
#include <sstream>
namespace mystd
{
class mystream
{
public:
template <class T>
mystream& operator>>(T& t)
{
std::string str;
std::cin >> str;
std::stringstream(str) >> t;
return *this;
}

} cin;
}
int main()
{
int x;
int y;
mystd::cin >> x >> y;
std::cout << std::endl << "x*y=" << x * y;
return x - x;
}