PDA

View Full Version : مشکل در برنامه



omidparkour
چهارشنبه 04 دی 1392, 23:42 عصر
سلام
من برنامه زیر رو نوشتم و میخوام نام دانشجو رو بگیره و اگر بیشتر از 15 حرف بود ارور بده اما قسمت ارورش رو بلد نیستم
لطفا اگه میشه کمک کنید
#include "stdafx.h"
#include "iostream"

using namespace std;

class student
{
int x;
public:
char name[15];
char fname[15];
void setname(char* name)
{
strcpy(this->name,name);


}
char* getname()
{
return name;
}

};
void main ()
{

student s1;
char name[15];
s1.setname(name);

}

NeoFighT
پنج شنبه 05 دی 1392, 10:49 صبح
میتونید تعداد حروف رو چک کنید و اگر از 15 حرف بیشتر بود یک ارور رو چاپ کنید.

#include "stdafx.h"
#include "iostream"
using namespace std;
class student
{
int x;
public:
char name[15];
char fname[15];
void setname(char* name)
{
strcpy(this->name,name);
}
char* getname()
{
return name;
}
};
void main ()
{
student s1;
char name[15];
do{
cout<<"Please Enter Name : ";cin>>name;
if(strlen(name)<=15){
s1.setname(name);
break;
}
else
cout<<"Your Name Most less then 15 char.";
getch();
}while(1);
}

omidparkour
پنج شنبه 05 دی 1392, 10:54 صبح
getch();
ارور میگیره

NeoFighT
پنج شنبه 05 دی 1392, 11:05 صبح
#include <conio.h>

omidparkour
پنج شنبه 05 دی 1392, 11:08 صبح
ارور زیر رو میده
'"E:\proj class c++\page 60 tamrin 7\ConsoleApplication6\Debug\ConsoleApplicatio
n6.exe"' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .

omidparkour
پنج شنبه 05 دی 1392, 11:10 صبح
راستی یک سئوال:
مگه کد زیر ورودی نمیگیره پس چرا دوباره توی main اومدین cin کردین؟؟
void setname(char* name)
{
strcpy(this->name,name);
}

NeoFighT
پنج شنبه 05 دی 1392, 11:19 صبح
من کد بالا رو همینجوری نوشتم و قصدم اجرا نبود قصدم این بود که متوجه موضوع بشید.
این کد کاملا سالمه و تست شده.و یک قسمت در آخر اضافه کردم که اسم رو چاپ میکنه.

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

class student
{
int x;
public:
char name[15];
char fname[15];
void setname(char* name)
{
strcpy(this->name,name);
}
char* getname()
{
return name;
}
};

int main ()
{
student s1;
char name[15];
do{
cout<<"Please Enter Name : ";cin>>name;
if(strlen(name)<=15){
s1.setname(name);
break;
}
else
cout<<"Your Name Most less then 15 char.\n";
getch();
}while(1);
cout<<s1.getname()<<endl;
return 0;
}

omidparkour
پنج شنبه 05 دی 1392, 11:22 صبح
این هم باز اجرا نمیشه :(

NeoFighT
پنج شنبه 05 دی 1392, 11:26 صبح
من این کد رو به درستی اجرا میکنم و مشکلی نداره.
یک پروژه دیگه باز کنید و کد رو قرار بدین ببنید درست میشه.
همون ارور قبلی رو میده؟؟

omidparkour
پنج شنبه 05 دی 1392, 11:32 صبح
امتحان کردم
ارورش:
'"E:\proj class c++\my example\1\Debug\1.exe"' is not recognized as an internal
or external command,
operable program or batch file.
Press any key to continue . . .

omidparkour
پنج شنبه 05 دی 1392, 11:49 صبح
راستی یک سئوال:
مگه کد زیر ورودی نمیگیره پس چرا دوباره توی main اومدین cin کردین؟؟
void setname(char* name)
{
strcpy(this->name,name);
}

NeoFighT
پنج شنبه 05 دی 1392, 11:50 صبح
در این رابطه اطلاعی ندارم.
ولی فکر کنم از کامپایلره.

omidparkour
پنج شنبه 05 دی 1392, 12:00 عصر
از visual studio 2012 استفاده میکنم

omidshaman
پنج شنبه 05 دی 1392, 12:10 عصر
میتونید تعداد حروف رو چک کنید و اگر از 15 حرف بیشتر بود یک ارور رو چاپ کنید.

#include "stdafx.h"
#include "iostream"
using namespace std;
class student
{
int x;
public:
char name[15];
char fname[15];
void setname(char* name)
{
strcpy(this->name,name);
}
char* getname()
{
return name;
}
};
void main ()
{
student s1;
char name[15];
do{
cout<<"Please Enter Name : ";cin>>name;
if(strlen(name)<=15){
s1.setname(name);
break;
}
else
cout<<"Your Name Most less then 15 char.";
getch();
}while(1);
}

سلام این کد کاملا اشتباهه !
شما وقتی name رو ارایه 15 کاراکتری ساختی نمی تونی اسم بیشتر از 15 تا وارد کنی ! ( یکی از موارد undefine behavior ه یعنی ممکنه برنامه کرش کنه یا درست اجرا بشه یا مثلا هارد فرمت بشه :) )
به جای char* از string استفاده کنین

omidparkour
پنج شنبه 05 دی 1392, 12:19 عصر
میشه کد رو اصلاح کنید
مگه کد زیر ورودی نمیگیره پس چرا دوباره توی main اومدین cin کردین؟؟
void setname(char* name)
{
strcpy(this->name,name);
}

omidshaman
پنج شنبه 05 دی 1392, 12:41 عصر
#include <iostream>
#include <string>
using namespace std;
#define MAX_NAME_SIZE 15
class Student
{
public:
void setName(const string& name)
{
if(name.size()>MAX_NAME_SIZE)
throw "Name is too big please try again\n";
else
this->name=name;
}
string getName()
{
return name;
}
private:
string name;
string lastName;
};
int main ()
{
const int stdNum=3;
Student students[stdNum];

for(int i=0;i<stdNum;i++)
{
string name;
cin>>name ;
try{
students[i].setName(name);
}
catch(const char* exc){
cout<<exc;
i--;
}

}

for(int i=0;i<stdNum;i++)
{
cout<<students[i].getName()<<"\n";
}
}

omidparkour
پنج شنبه 05 دی 1392, 12:49 عصر
دستتون درد نکنه اما من مبتدی ام
لطفا ساده بنویسید

amirhossein.ha
پنج شنبه 05 دی 1392, 16:29 عصر
اگه فقط قراره اسم رو بگیره و اگه بیشتر از 15 حرف بود ارور بده این کد کار میکنه :
#include <iostream>
using namespace std ;
int main()
{
string s ;
cin >> s ;
if(s.size() > 15)
cout << "Name is too big please try again\n" ;
return 0;
}

hooman-m
پنج شنبه 05 دی 1392, 16:33 عصر
مهندسین عزیز یخزده هم ب فکر من باشید که فردا باید برنامه رو تحویل بدم... لطفا کمکم کنید :(
http://barnamenevis.org/showthread.php?433688-***%DA%A9%D9%85%DA%A9-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C****-%D8%AE%DB%8C%D9%84%DB%8C-%D9%81%D9%88%D8%B1%DB%8C%D9%87-%D8%A7%D8%AE%D9%87-%D8%A7%D9%85%D8%B4%D8%A8-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%DA%A9%D9%86%D9%85-%D8%A8-%D8%A7%D8%B3%D8%AA%D8%A7%D8%AF-%28

fahimeh1512
پنج شنبه 05 دی 1392, 21:08 عصر
امتحان کردم
ارورش:
'"E:\proj class c++\my example\1\Debug\1.exe"' is not recognized as an internal
or external command,
operable program or batch file.
Press any key to continue . . .

سلام مگه ورودی تون رو از cmd وارد میکنین؟ این ارور فکر کنم مال کامندلاینه اگه آره مشکل از مسیریه که فایلت توش قرار داره کامند یه محدودیتی که داره اینه ک فایل و نباید تو پوشه های تودرتو بذارین اون وقت مسیری که بهش میدین طولانی میشه و نمیتونه اونو بخونه تو یه مسیر سرراست تر بذاری فایلتو مشکلش برطرف میشه مثلا اینجوری E:\1\Debug\1.exe

Ananas
جمعه 06 دی 1392, 00:47 صبح
این هم کد ساده ایه:

class student
{
public:
char name[16];
void setname(char * new_name)
{
if (strlen(new_name) > 15)
cout << "error : strlen > 15";
else
strcpy(this->name, new_name);
};
};
int main ()
{

student s1;
char name[15];
cin >> name;
s1.setname(name);
cout << s1.name;

getchar();
getchar();

return 0;
}




مگه کد زیر ورودی نمیگیره پس چرا دوباره توی main اومدین cin کردین؟؟
1
2
3
4
void setname(char* name)
{
strcpy(this->name,name);
}


نه! این کد فقط یک رشته رو در رشته ی دیگه کپی میکنه. برای گرفتن ورودی باید cin رو بنویسید.