PDA

View Full Version : استادان C++ راهنماییم کنید لطفا که این تیکه کد چه مشکلی داره !!؟!!؟



mehraban_msg
پنج شنبه 12 دی 1392, 20:53 عصر
struct student
{
char name[10];
char fname[20];
float av;
int id;
};
struct student st[20];


جای دیگه برنامه این کد اجرا نمیشه...البته فقط این دو خط قرمز

for(int j=i;j<20;j++)
{
st[j].id=st[j+1].id;
st[j].name=st[j+1].name;
st[j].fname=st[j+1].fname;
st[j].av=st[j+1].av;
}

کامبیز اسدزاده
پنج شنبه 12 دی 1392, 20:59 عصر
struct student
{
char name[10];
char fname[20];
float av;
int id;
};
struct student st[20];


جای دیگه برنامه این کد اجرا نمیشه...البته فقط این دو خط قرمز

for(int j=i;j<20;j++)
{
st[j].id=st[j+1].id;
st[j].name=st[j+1].name;
st[j].fname=st[j+1].fname;
st[j].av=st[j+1].av;
}


اولا هر کدی که در پست هاتون میزنید در بین تگ های C++ قرار بدین.
دوما من هیچ تعریفی از نوع public در کد شما ندیدم ! این عادیه که کد شما در جاهای دیگر برنامتون اجرا نشود.

mehraban_msg
پنج شنبه 12 دی 1392, 21:09 عصر
اولا هر کدی که در پست هاتون میزنید در بین تگ های C++ قرار بدین.
دوما من هیچ تعریفی از نوع public در کد شما ندیدم ! این عادیه که کد شما در جاهای دیگر برنامتون اجرا نشود.

ممنون از پاسخ
اولا منظورتون از اینکه بین تگهای C++ قرار بدم چیه؟
دوما اگر public تعریف نکردم برای هر 4تا اینطور بوده(id , av ,name ,fname) پس چطور این مشکل فقط برای (name و fname ) هست؟!!!

کامبیز اسدزاده
پنج شنبه 12 دی 1392, 21:26 عصر
ممنون از پاسخ
اولا منظورتون از اینکه بین تگهای C++ قرار بدم چیه؟
دوما اگر public تعریف نکردم برای هر 4تا اینطور بوده(id , av ,name ,fname) پس چطور این مشکل فقط برای (name و fname ) هست؟!!!

منظورم از تگ های C++ در هنگام ارسال پست در انجمن کد هاتون رو در ویرایشگر روی کلمه c++ کلیک و بین اون قرار بدین تا درست دیده بشه.
در رابطه با کدتون هم این طوری بنویسید :


st[j].name == st[j + 1].name;
st[j].fname == st[j + 1].fname;


یعنی چون رشته هست و کاراکتر از به جای تک = از == استفاده کنید ببینید حل میشه یا نه.

mehraban_msg
پنج شنبه 12 دی 1392, 21:35 عصر
خیر.ارور برطرف شده و ران میشه ولی درست عمل نمیکنه.... ببینید این کد بخشی از تابع حذف از آرایه هست.بصورت کامل تابع رو میذارم ببینید شاید متوجه شید.ممنون
void delet()
{
clrscr();
int del;
display();
cout<<"Enter Id student for delet : ";
cin>>del;
for(int i=0;i<20;i++)
{
if(del==st[i].id)
{
for(int j=i;j<20;j++)
{
st[i].id=st[i+1].id;
st[i].name==st[i+1].name;
st[i].fname==st[i+1].fname;
st[i].av=st[i+1].av;
}
cout<<"delet ok";
}
}
}

rahnema1
پنج شنبه 12 دی 1392, 21:48 عصر
سلام
فکر کنم علامت مساوی درست بود شرط for را اصلاح کنید
در ضمن واسه بهینه شدن هم می تونید کاری کنید که دیگه for اول لازم نباشه


for(int j=i;j<19;j++)

کامبیز اسدزاده
پنج شنبه 12 دی 1392, 21:49 عصر
خب شما ابتدا برای id چیزی تعریف نمیکنید !!! برای مثال وقتی میگه id رو وارد کن وارد که میکنی باید مقدار وارد شده رو با مقدار از قبل موجود در داده ها مقایسه کنه ! به صورت دستی int id = 1; رو بزار و هنکام وارد کردن id در کنسول 1 رو بزن و نتیجه ok delete رو ببین.

mehraban_msg
پنج شنبه 12 دی 1392, 22:03 عصر
خب شما ابتدا برای id چیزی تعریف نمیکنید !!! برای مثال وقتی میگه id رو وارد کن وارد که میکنی باید مقدار وارد شده رو با مقدار از قبل موجود در داده ها مقایسه کنه ! به صورت دستی int id = 1; رو بزار و هنکام وارد کردن id در کنسول 1 رو بزن و نتیجه ok delete رو ببین.

خوب این مقایسه با if انجام شده دیگه...غیر از اینه!!

rahnema1
پنج شنبه 12 دی 1392, 22:06 عصر
یک حلقه فور کافیه


for(int i=del;i<19;i++)
{
{
st[i].id=st[i+1].id;
st[i].name=st[i+1].name;
st[i].fname=st[i+1].fname;
st[i].av=st[i+1].av;
}
}

کامبیز اسدزاده
پنج شنبه 12 دی 1392, 22:10 عصر
خوب این مقایسه با if انجام شده دیگه...غیر از اینه!!
من که سر در نیاوردم از سوال شما ! شاید از خستگیه بیش از حد باشه مغزم کار نمیکنه.
ولی شما در حلقه مقدار میگیری و بررسی میکنی و در نهایت در صورت برابر بودن id مقادیر برابر با id رو حذف میکنی ! کد شمارو من اجراء کردم کار نکرد و با مقدار دهی اولیه جواب داد.