PDA

View Full Version : راهنمايي درباره نوع داده ورودي



amirjazire
جمعه 01 آبان 1394, 20:38 عصر
چطور كد بنويسم كه موقع وروديه داده هم امكان وارد كردن عدد باشه هم كاراكتر؟؟؟!!!
كه بعدش شرط بزارم كه كدوم بايد باشه اگه نباشه اشتباه!!


ممنون ميشم كمكم كنيد :لبخندساده:
اگه سوالم پيش پا افتادس عذرخواهي مي كنم تازه شروع به برنامه نويسي كردم.:خجالت:

Ananas
جمعه 01 آبان 1394, 22:19 عصر
با استفاده از اشاره گر void و یک enum که نوع ورودی رو مشخص میکنه میتونیم همچین تابعی داشته باشیم.
مثلا فرض کنید که تابعی میخایم که قراره ورودی رو با عدد 15 مقایسه کنه و بگه مساوی هست یا نه:

enum MY_FN_INPUT
{
MFI_INTEGER,
MFI_FLOAT,
MFI_STR
};

bool MyFunction(const void * p_InputData, const MY_FN_INPUT InputType)
{
switch (InputType) {
case MFI_INTEGER:
{
int * p_int = (int *)p_InputData;
return ((*p_int) == 15);
};
break;
case MFI_FLOAT:
{
float * p_float = (float *)p_InputData;
return ((*p_float) == 15.0f);
};
break;
case MFI_STR:
{
char * p_str = (char *)p_InputData;
return (
(p_str[0] == '1') &&
(p_str[1] == '5') &&
(p_str[2] == (char)0)
);
};
break;
default:
return false;
};
};

amirjazire
جمعه 01 آبان 1394, 23:46 عصر
خيلي ممنون از جوابي كه دادين.
راه ساده تري مي شه نوشت؟
مثلا فقط با if ,while, for بنويسيم!!

Ananas
شنبه 02 آبان 1394, 01:23 صبح
خواهش میکنم. قابلی نداشت.

راه ساده تري مي شه نوشت؟
مثلا فقط با if ,while, for بنويسيم!!
بستگی داره که دقیقا چی باشه! ممکنه ساده تر بشه. یک مثال دقیق تر بپرسید تا بگم.

amirjazire
شنبه 02 آبان 1394, 12:22 عصر
براي نوشتن بازي هوب احتياج دارم برنامه طوري بنويسم كه كاربر هم بتونه عدد وارد كنه هم كاراكتر كه بعدش شرط بزارم كه آيا درست وارد كرده يا نه!
بازي با عدد تصادفي كه كامپيوتر مشخص ميكنه شروع مي شه !

ممنون

Ananas
یک شنبه 03 آبان 1394, 02:10 صبح
خب این باید در هر صورت کاربر اول متن وارد کنه. حالا باید چک کنید که متن وارد شده قابل تبدیل به عدد هست یا نه. مثلا "123" قایل تبدیل هست ولی "2hf_8" این حروف قاطی داره. پس باید متن شما همه ی کاراکترهاش چک بشن و ارقام از "0" تا "9" باشن یا "+" یا "-". اگر اعداد اعشاری هم در کار باشه "." و "e" و یا "E" هم ممکنه داشته باشه برای نماد علمی.
حالا فرض میکنیم که فقط اعداد صحیح باشن:

#include <stdlib.h>
#include <iostream.h>
using namespace std;

bool CheckCharForNumber(const char Ch)
{
if ((Ch == '+') ||
(Ch == '-'))
return true;
else
return ((Ch >= '0') && (Ch <= '9'));
};

bool CheckStrForNumber(const char * p_str)
{
int len = strlen(p_str);
for (int i = 0; i < len; i++)
{
if (!CheckCharForNumber(p_str[i]))
return false;
};
return true;
};

int main()
{
int x;
char p_str[256];
while (true)
{
cout << "Type a Number:";
cin >> p_str;
if (CheckStrForNumber(p_str))
{
x = atol(p_str);
cout << x << endl << "Ok" << endl;
break;
}
else
{
cout << "Error!" << endl;
};
};

getchar();
getchar();
return 0;
}

amirjazire
یک شنبه 03 آبان 1394, 09:54 صبح
خيلي خيلي ممنون دوست عزيز عالي بود.:تشویق:
پس من راه اشتباهي انتخاب كردم بايد الگوريتم خودمو عوض كنم.
حتما نتيجه كارمو مينويسم.:چشمک:
سوال ام داشتم مزاحمت مي شم:خجالت:

rahnema1
یک شنبه 03 آبان 1394, 11:56 صبح
سلام
البته از روش زیر هم می شه استفاده کرد که آیا عدد درست وارد شده یا نه

#include <iostream>
#include <sstream>
using namespace std;
int main()
{
int x;
string str;
cin >> str;
if((stringstream(str) >> x).rdbuf()->in_avail() > 0)
{
cout << "Error!" << endl;
}
else
{
cout << x << endl;
}
}

amirjazire
دوشنبه 04 آبان 1394, 00:37 صبح
كد بازي هوب

#include "stdafx.h"#include "iostream"
#include "conio.h"
#include "stdlib.h"
#include "time.h"
#include "string"


using namespace std;


int random()
{
srand(time(0));
int random_number=(rand()%100);
return random_number;


}






int _tmain(int argc, _TCHAR* argv[])
{
char start;
int number,counter=0,pcturn,c;
string HOOB;


cout<<"\n\t\t\t<<< wellcome to HOOB games : >>>) "<<endl;
cout<<"\n\tplz enter S for start! "<<endl;

for(int i=0;i<1;i++)
{
cin>>start;
if(start!='s' && start!='S')
{
cout<<"\t\t\t<<<YOU MISS GOOD GAME>>>"<<"\n\t\t\t -----BYEBYE-----"<<endl;
break;
}
else
cout<<" number: "<<random()<<"\n"<<endl;



pcturn=random()+1;

while(counter<=4)
{

if(pcturn%5==0)
{
cout<<" turn pc : HOOB"<<endl;
}
else
{
cout<<" turn pc : "<<pcturn<<endl;
}

cout<<" turn you : ";
c=pcturn+1;
if(c%5!=0)
{
cin>>number;


if(number!=c)
{
cout<<"\t\t\t<<< GAME OVER >>>"<<endl;
break;
}
else
pcturn=number+1;
}
else if(c%5==0)
{
cin>>HOOB;


if(HOOB!="hoob")
{
cout<<"\t\t\t<<< GAME OVER >>>"<<endl;
break;
}
else if(HOOB=="hoob")
pcturn=pcturn+2;
counter++;
}
if(counter==3)
{
cout<<"\n\t\t\t>>>>>>>YOU WIIIIN<<<<<<<"<<endl;
break;
}


}//end while



}//end for

getch();
return 0;
}