اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

خوندن نوع داده دلخواه از ورودی

+2 امتیاز
788 نمایش

چطور با دستور cin از کاربر ورودی ای رو بگیرم که از نوع داده X هست؟
اصلا این کار ممکنه؟

پرسیده شده دوشنبه ۱۹ فروردین ۱۳۹۲ در C++ توسط CPP_Crawler4  

منظورت اینه که مثل scanf() بشه به عنوان پارامتر واسش تعریف کرد یا اینکه بعد از دریافت ورودی از یه فیلتر استفاده کنیم؟

منظورم اینه که یه دستوری باشه که کاربر هر نوع داده به عنوان ورودی وارد کرد، بخونه و گیر نده و البته برداشت درست هم ازش بکنه.

2 پاسخ

0 امتیاز

دستور cin تا قبل از زدن space ورودی میگیره و هیچ اهمیتی هم براش نداره از چه نوعی باشه چون چک نمیکنه، ولی خب به مقداری که گنجایشش تعریف میشه در متغیر مد نظرش قرار میده و بقیه اطلاعات در جریان ورودی میمونه.
ولی از طریق getline() میشه این کار رو خیلی ساده تر انجام داد. مثال زیر نشون میده که چطور با این تابع میشه اطلاعات رو گرفت و در صورت نیاز به هم تبدیل کرد:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {

 string input = "";

 // How to get a string/sentence with spaces
 cout << "Please enter a valid sentence (with spaces):\n>";
 getline(cin, input);
 cout << "You entered: " << input << endl << endl;

 // How to get a number.
 int myNumber = 0;

 while (true) {
   cout << "Please enter a valid number: ";
   getline(cin, input);

   // This code converts from string to number safely.
   stringstream myStream(input);
   if (myStream >> myNumber)
     break;
   cout << "Invalid number, please try again" << endl;
 }
 cout << "You entered: " << myNumber << endl << endl;

 // How to get a single char.
 char myChar  = {0};

 while (true) {
   cout << "Please enter 1 char: ";
   getline(cin, input);

   if (input.length() == 1) {
     myChar = input[0];
     break;
   }

   cout << "Invalid character, please try again" << endl;
 }
 cout << "You entered: " << myChar << endl << endl;

 cout << "All done. And without using the >> operator" << endl;

 return 0;
}
پاسخ داده شده جمعه ۲۳ فروردین ۱۳۹۲ توسط CPP_Crawler5  

اين كد براي اعداد اعشاري هم جواب ميده؟

0 امتیاز

cin رو می‌شه سربارگذاری کرد. این سربازگذاری به صورت زیر هست

istream& operator>>(istream& input, class &obj);

برای وقتی که قراره تابع دوست تعریف بشه

istream& operator>>(istream& input);

برای وقتی که قراره به عنوان تابع عضو تعریف بشه.
حالا داخل تابع input مثل cin می‌مونه. مثلاً فرض کنیم کلاس ما یه بردار دوبعدی باشه. می‌شه نوشت

istream& operator>>(class &obj){
  input>>obj.x>>obj.y;
  return input;
}

دقت کنید که در سربارگذاری ورودی خود جریان ورودی در انتهای کار برگردونده می‌شه.
حالا در برنامه می‌شه نوشت

int main(){
  class C;
  std::cin>>C; 
}

کاربر باید دو عدد وارد کنه که می‌ره داخل شی مورد نظر

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده سه شنبه ۲۷ فروردین ۱۳۹۲ توسط prodo  
ویرایش شده سه شنبه ۲۷ فروردین ۱۳۹۲ توسط prodo