PDA

View Full Version : سوال: اشکال و خطاهای متعدد در برنامه



bghad1
جمعه 16 دی 1390, 02:33 صبح
سلام دوستان...برنامه زیر رو میتونین خطاهاشو بگین چجوری میشه رفع کرد؟

بیشتر خطاها توی قسمت switch هستش...میدونم که switch داخل پرانتزش مقدار کاراکتر یا int میگیره..اما اینو میشه چجوری پیاده سازی کرد پس؟! چ جاهایی از برنامه باید درست بشه؟ چیا باید اضافه و کم بشه؟؟
لطفاً راهنماییم کنین...
یه جور برنامه ایه که باید مثلاً ‌همینجوری نشون بده که پیشنیاز اون درسی رو که زدیم گذروندیم یا نه...

تعداد خط هاش زیاد بود گفتم جدا بذارم بهتره...

bghad1
جمعه 16 دی 1390, 21:27 عصر
اکثر دوستان نگاه نکردن برنامه رو حتی..واسه همین سورس رو در ادامه هم میزارم براتون...شاید که حداقل نگاه کردین و کمک کردین...خیلی سادس...من سی پلاسی نیستم و ا لا سادس


// testStudent02.cpp : Defines the entry point for the console application.

//

#include

"stdafx.h"



//int _tmain(int argc, _TCHAR* argv[])

//{

// return 0;

//}



#include

<iostream>

#include

<stdio.h>

#include

<string.h>

using

std::cout;

using

std::endl;

using

std::cin;

using

namespace std;

using

std::string;

struct

table

{


char teachername[20];


char lessonname[20];


int unit;


int capacity;

};

struct

student

{


int unitsum;


struct student *fl,*bl;

string passed[20];

string name;

string slesson[20];

};

class

intro

{


public:

intro();


void show();


void gette();


void getst();


private:

table a[7][5];

student *start,*p,*cur;

string lu[21][2];

};

intro::intro()

{

start=
new struct student;

start->fl=NULL;

start->bl=NULL;

cur=start;

};

void

intro::show()

{



lu[0][0]=
"lesson";

lu[0][1]=
"Unit";

lu[1][0]=
"Math1";

lu[1][1]=
"3";

lu[2][0]=
"Math2";

lu[2][1]=
"3";

lu[3][0]=
"Phys2";

lu[3][1]=
"3";

lu[4][0]=
"Phys1";

lu[4][1]=
"3";

lu[5][0]=
"AP";

lu[5][1]=
"3";

lu[6][0]=
"BP";

lu[6][1]=
"3";

lu[7][0]=
"Dif";

lu[7][1]=
"3";

lu[8][0]=
"Eng";

lu[8][1]=
"2";

lu[9][0]=
"ADeng";

lu[9][1]=
"2";

lu[10][0]=
"El_Circuit";

lu[10][1]=
"3";

lu[11][0]=
"Farsi";

lu[11][1]=
"2";

lu[12][0]=
"Pre-IT";

lu[12][1]=
"3";

lu[13][0]=
"IT1";

lu[13][1]=
"3";

lu[14][0]=
"IT2";

lu[14][1]=
"3";

lu[15][0]=
"DS";

lu[15][1]=
"3";

lu[16][0]=
"DS-Math";

lu[16][1]=
"3";

lu[17][0]=
"Sport1";

lu[17][0]=
"1";

lu[18][0]=
"Sport2";

lu[18][1]=
"1";

lu[19][0]=
"Vasaya";

lu[19][1]=
"2";

lu[20][0]=
"Amar";

lu[20][1]=
"3";


int m;


int n;


int i;


int j;


for(m=0;m<21;m++)

{
for(n=0;n<2;n++)

{

cout<<lu[m][n]<<endl;

}

}


for(i=0;i<7;i++)

{


for(j=0;j<5;j++)

{

cout<<a[i][j].capacity<<endl;

}

}

}

void

intro::getst()

{


int n;

p=
new struct student;

p->fl=NULL;

p->bl=cur;

cur->fl=p;

cur=p;

cout<<
"enter number of lessons you've passed:"<<"\n";

cin>>n;


for(int k=0;k<n;k++)

{

cout<<
"enter lessons you've passed:"<<"\n";

cin>>p->passed[k];

}

while

(p->unitsum<20)

{


int i=0,j=0,k=0;

cout<<
"\n enter the code of the lesson you want to have this semester:"<<endl;

cin>>i>>j;

p->unitsum+=a[i][j].unit;


if(p->unitsum<20)

{


bool w;

// string aa = boost::lexical_cast< std::string >(a[i][j].lessonname);




//string tmp;


//int counter = 0 ;


//for ( int ii = 0 ; ii < 20 ; ii++,j++ )


//{


// tmp.assign(a[ii][j].lessonname[counter]);


// counter++;


//}




int counter;




switch(counter)

{


case "Math2":for(int m=0;(m<20 && w==0);m++)


if("Math1"==p->passed[m])

w=1;


break;


case "Phys2":for(int m=0;(m<20 && w==0);m++)


if("Phys1" == p->passed[m])

w=1;


break;


case "AP" :for(int m=0;(m<20 && w==0);m++)


if("BP"==p->passed[m])

w=1;


break;


case "Dif":for(int m=0;(m<20 && w==0);m++)


if("Math2"==p->passed[m])

w=1;


break;


case "ADeng":for(int m=0;(m<20 && w==0);m++)


if("Eng"==p->passed[m])

w=1;


break;


case "IT1":for(int m=0;(m<20 && w==0);m++)


if("Pre-IT"==p->passed[m])

w=1;


break;


case "IT2":for(int m=0;(m<20 && w==0);m++)


if("IT1"==p->passed[m])

w=1;


break;


case "DS":for(int m=0;(m<20 && w==0);m++)


if("BP"==p->passed[m])

w=1;


break;


case "Sport2":for(int m=0;(m<20 && w==0);m++)


if("Sport1"==p->passed[m])

w=1;


break;


case "ELcircuits":for(int m=0;(m<20 && w==0);m++)


if("BP"==p->passed[m])

w=1;
break;


default:

w==1;


break;

}



student.slesson[k] = a[i][j].lessonname[k];

k++;

a[i][j].capacity--;

}


else


break;

}

}

void

intro::gette()

{


int i , j;

cout<<
"enter code of day and time you want to teach on:";

cin>>i>>j;

cout<<
"enter your name:"<<"\n";

cin.getline(a[i][j].teachername,19);

cout<<
"\n enter lesson name:"<<"\n";

cin.getline(a[i][j].lessonname,19);

cout<<
"\n enter unit of lesson:"<<"\n";

cin>>a[i][j].unit;

}

int

main()

{

intro cls =
new intro();


char ch;


do

{

cout<<
"enter 's' for student,'t' for teacher and 'e' to exit";

cin>>ch;


switch(ch)

{


case's':


case'S':

cls.show();

cls.getst();


break;


case't':


case'T':

cls.show();

cls.gette();


break;


default:


break;

}

}
while(ch!='e'&&'E');


return 0;



}

shahmohammadi
جمعه 16 دی 1390, 23:17 عصر
سلام.
بله نمی شه داخل case ها رشته بکار برد فقط کاراکتر و اینت. به علاوه این هم معنی نمیده:
int counter;
switch(counter)
نمی شه که به محض اینکه یه متغیری رو تعریف کردیم مقدارشو بررسی کنیم. اگه بدونم اونجا می خاستید چی کار کنید می تونم کمکتون کنم.

bghad1
شنبه 17 دی 1390, 00:14 صبح
سلام.
بله نمی شه داخل case ها رشته بکار برد فقط کاراکتر و اینت. به علاوه این هم معنی نمیده:
int counter;
switch(counter)
نمی شه که به محض اینکه یه متغیری رو تعریف کردیم مقدارشو بررسی کنیم. اگه بدونم اونجا می خاستید چی کار کنید می تونم کمکتون کنم.

سلام...تشکر از توجهتون دوست من:)
قراره توی switch چک بشه که پیشنیازی دروس رعایت شده یا نه..

shahmohammadi
شنبه 17 دی 1390, 15:54 عصر
من زیاد برنامه رو بررسی نکردم ولی می دونم بهتره که بیاین وقتی کد درس رو میگیرین (طبق تعاریف زیر که کد ریاضی 1 برابر 1 هست و کد ریاضی 2 برابر 2 هست و...) اون کد رو در سویچ بنویسین.
lu[0][0]="lesson";
lu[0][1]="Unit";
lu[1][0]="Math1";
lu[1][1]="3";
lu[2][0]="Math2";
lu[2][1]="3";
lu[3][0]="Phys2";
یعنی کد رو به صورت زیر بنویسید:
bool w=0;
switch(code)
{
case 2:
for(int m=0;(m<20 && w==0);m++)
if(1==p->passed[m])
w=1;
break;
case4:
for(int m=0;(m<20 && w==0);m++)
if(3 == p->passed[m])
w=1;
break;
البته زیاد بررسی نکردم که ببینم ارور می ده یانه ولی می دونم که اینطوری باید درستش کنید.

bghad1
شنبه 17 دی 1390, 17:06 عصر
من زیاد برنامه رو بررسی نکردم ولی می دونم بهتره که بیاین وقتی کد درس رو میگیرین (طبق تعاریف زیر که کد ریاضی 1 برابر 1 هست و کد ریاضی 2 برابر 2 هست و...) اون کد رو در سویچ بنویسین.
lu[0][0]="lesson";
lu[0][1]="Unit";
lu[1][0]="Math1";
lu[1][1]="3";
lu[2][0]="Math2";
lu[2][1]="3";
lu[3][0]="Phys2";
یعنی کد رو به صورت زیر بنویسید:
bool w=0;
switch(code)
{
case 2:
for(int m=0;(m<20 && w==0);m++)
if(1==p->passed[m])
w=1;
break;
case4:
for(int m=0;(m<20 && w==0);m++)
if(3 == p->passed[m])
w=1;
break;
البته زیاد بررسی نکردم که ببینم ارور می ده یانه ولی می دونم که اینطوری باید درستش کنید.

خب آخه مثلاً‌ چجوری به برنامه میگیم که اگه ریاضی 2 بود چک کن ببین قبلش ریاضی 1 پاس شده یا نه؟!؟! نمیشه که!!‌کد ریاضی 2 که 2 نیست که بهش بگیم//..یه استرینگه....چیکارش کنیم؟
یا اصلاً‌ اگه بخوایم انجامش بدیم توی حالت عددی چطوری می تونیم انجامش بدیم!؟

shahmohammadi
شنبه 17 دی 1390, 18:04 عصر
با داشتن کد یعنی مثلا 2 می شه به این صورت رشته رو هم به دست آورد. lu[2][0]

bghad1
شنبه 17 دی 1390, 20:35 عصر
با داشتن کد یعنی مثلا 2 می شه به این صورت رشته رو هم به دست آورد. lu[2][0]

خب آخه مقداره داخل آرایه که string هستش که!!! نمیشه که آخه!
string lu[21][2] ..a

shahmohammadi
شنبه 17 دی 1390, 21:10 عصر
جناب bghad1 (http://barnamenevis.org/member.php?91930-bghad1)

string lu[21][2] ..aیکم فکر کنید میبینید که اون 21 ی که نوشتید رشته نیست و یه عدد صحیح هست. که
شما باید عدد رو می گیرید بعد توی اندیس قرار می دید و هر جا لازم بود از طریق اون رشته رو بدست می آرید که
این عدد رو می شه داخل کیس ها نوشت. ولی رشته رو که نمی شه نوشت.

من یه بار دیگه یه چیزهایی می نویسم که شما اشکالاتون رفع شه:

کد ریاضی 2 که 2 نیست که بهش بگیم//..یه استرینگه....چیکارش کنیم؟قبل از اینکه نوشته ای رو داخل نقل قول بندازید یکمی اونو خوب بخونید.
lu[2][0]="Math2";
به این 2 یه توجهی بکنید.

باید بیاین اون عدد رو بگیرید تا بتونید توی سویچ قرار بدین. رشته رو که نمی شه داخل سویچ گذاشت.

خب آخه مثلاً‌ چجوری به برنامه میگیم که اگه ریاضی 2 بود چک کن ببین قبلش ریاضی 1 پاس شده یا نه؟!؟!دقیقا همون طوری که کدشو نوشتم. و شما داخل نقل قول هم گذاشتید.

اگر متوجه این بدیهیات نشدید می تونید اصلا بی خیال سویچ شید و از if else های تودرتو استفاده کنید تا بتونید از همون رشته هاتون استفاده کنید.