PDA

View Full Version : سوال: کنترل کردن ورودی (سی++)



drstrike
شنبه 19 تیر 1389, 20:34 عصر
سلام...
این برنامه اطلاعات یه کتابو میگیره و چاپ میکنه...
میخوام رو داده های ورودی کنترل داشته باشم. مثلا اگه واسه شابک کتاب کاراکتر غیر عددی وارد شد، نامعتبر اعلام شه و دوباره اونو از کاربر بخواد ( از تابع isdigit استفاده کردم، جواب نداد).

مشکل دوم:
از تابع del که استفاده می کنم، تاریخ رو صفر نمی کنه؛ ظاهرا تابع clr داخلش اجرا نمی شه!

سورس برنامه:



#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define K 80
void menu()
{
clrscr();
cout<<" 1.Add 2.Delete 3.View 4.Exit ";
}

void error()
{
cout<<"\n\t\t\t\tInvalid Import!";
getch();
}

class date
{
private:
int y,m,d;
public:
date(int year=0,int month=0, int day=0):
y(year),m(month),d(day){}

void clr(){y=m=d=0;}

void showdate(){cout<<y<<"/"<<m<<"/"<<d<<endl;}

void setdate(){cout<<"Year: "; cin>>y; cout<<"Month: "; cin>>m;
cout<<"day: "; cin>>d;}
};

class book: public date
{
private:
date publish; long int id,page; char name[K],author[K];

public:
book(){strcpy(name,'\0'); strcpy(author,'\0'); page=0; id=0;}

void del()
{
strcpy(name,'\0');
strcpy(author,'\0');
page=0;
id=0;
clr();
}

void insert()
{
clrscr();
cout<<"Enter Book ID: "; cin>>id;
cout<<"\nEnter Book Name: "; cin>>name;
cout<<"\nEnter Book author: "; cin>>author;
cout<<"\nEnter Book pages: "; cin>>page;
cout<<"\nEnter Publish Date:\n"; publish.setdate();

void view()
{
clrscr();
cout<<" ID Name Author Pages Publish Date\n ";
cout<<"-----------------------------------------------------------------------------";
gotoxy(2,3); cout<<id; gotoxy(16,3); cout<<name; gotoxy(33,3);
cout<<author; gotoxy(54,3); cout<<page; gotoxy(68,3); publish.showdate();
cout<<"\n\t\t\t Press Any Key..."; getch();
}

};

int main()
{
book x; int n;
for(;;)
{
menu();
cout<<"\n\n\nEnter Number of Item ";
cin>>n;
switch(n)
{
case 1: x.insert(); break;
case 2: x.del(); break;
case 3: x.view(); break;
case 4: exit(0);
default: cout<<"\n\t\t\t\tInvalid Number!"; getch();
}
}//end of for
getch();
return 0;

}




Salar Ashgi
شنبه 19 تیر 1389, 21:09 عصر
بهتره ورودی رو بصورت رشته ای گرفته و یه تابعی واسه اینکار بنویسید :



#include <iostream>
#include <conio>
#include <string>
using namespace std;
bool is_digit(string str){
bool res = true;
int f;
for(int i=0;i<str.size();i++){
f = (int)(str[i]);
if(f>=48 && f<=57)
res = res & true;
else{
res = res & false;
break;}
}
return res;
}
//==============================
int main(){
string str="";
while(true){
cout<<"Enter a string :\n";
cin>>str;
cout<<is_digit(str)<<endl;
cout<<"===================\n";}
getch();
}

soorena
یک شنبه 20 تیر 1389, 13:28 عصر
سلام
فک کنم اين اولين پست من هستش.
عرض کنم خدمتتون که اول اينکه شما اگه از cpp استفاده ميکنی بهتره حتماً از کتابخونه های استاندارد
استفاده کنی.
اول برنامت using namespace std بزار و h. ها رو هم بردار.
clrscr() استاندارد نيس استفاده نکن.
برای چک کردن هم فک ميکنم بشه از کلاس sstream استفاده کرد.

HH2BN1990
یک شنبه 20 تیر 1389, 13:37 عصر
بهتره ورودی رو بصورت رشته ای گرفته و یه تابعی واسه اینکار بنویسید :



#include <iostream>
#include <conio>
#include <string>
using namespace std;

درستش اینه!


#include <iostream>
#include <conio.h>
#include <string>
using namespace std;

drstrike
یک شنبه 20 تیر 1389, 13:51 عصر
عرض کنم خدمتتون که اول اينکه شما اگه از cpp استفاده ميکنی بهتره حتماً از کتابخونه های استاندارد
استفاده کنی.

میشه بگید واسه این مشکل، مثلا از کدوم تابع کتابخونه ای استفاده کنم؟؟



اول برنامت using namespace std بزار و h. ها رو هم بردار.
clrscr() استاندارد نيس استفاده نکن.


دوست عزیز بنا به به کامپایلر دستورات فرق می کنه.
مثلا من که از Boralnd C++‎‎ 3.1 تحت داس استفاده می کنم، حتما باید از هدرها با h. استفاده کنم.
using namespace std رو هم خطا میگیره ازش.



برای چک کردن هم فک ميکنم بشه از کلاس sstream استفاده کرد.

مثال میتونی بزنی؟؟:متفکر:



درستش اینه!


#include <iostream>
#include <conio.h>
#include <string>
using namespace std;


فک کنم شما از VS استفاده می کنی و سالار از Borland C++‎‎ 5.2

Salar Ashgi
یک شنبه 20 تیر 1389, 14:07 عصر
درستش اینه!


بستگی به نوع کامپایلر داره ! در بعضی ها میشه h. ها رو نذاشت و در بعضی ها باید بذاری و هر کدوم واسه

خودش درسته .

Salar Ashgi
یک شنبه 20 تیر 1389, 14:09 عصر
drstrike (http://barnamenevis.org/forum/member.php?u=51076) ، HH2BN1990 (http://barnamenevis.org/forum/member.php?u=128206) ، لطفا بحث رو به حاشیه نکشونید و در جهت تاپیک ، فعالیت کنید .

drstrike (http://barnamenevis.org/forum/member.php?u=51076) ، مشکل شما حل شد ؟

drstrike
یک شنبه 20 تیر 1389, 14:13 عصر
drstrike ، HH2BN1990 ، لطفا بحث رو به حاشیه نکشونید و در جهت تاپیک ، فعالیت کنید .


چشم! :لبخند:


drstrike ، مشکل شما حل شد ؟

اولی اره، دومی نه