PDA

View Full Version : مقداردهی به عناصر آرایه ای که به وسیله new به آن فضا داده شده



fshb_ 1370
دوشنبه 25 مرداد 1389, 07:39 صبح
سلام
ميخوام يك برنامه بنويسم كه يك آرایه 3 تایی از نوع يك structure ايجاى كنه و به وسيله new به آرایه فضا اختصاص بده. من نمیدونم این جا چطور باید به عناصر مقدار بدم، ممنون میشم راهنمایی کنید.



#include<iostream>
using namespace std;
int main()
{
struct candyBar
{
char brand[20];
float weight;
int calory;
};
candyBar *snacks=new snacks[3];
}

حامد مصافی
دوشنبه 25 مرداد 1389, 09:33 صبح
#include<iostream>
using namespace std;
int main()
{
struct candyBar
{
char brand[20];
float weight;
int calory;
};
candyBar *snacks = new snacks;
snacks.brand = "Sample brand";
snacks.weight = 20;
snacks.calory = 4;
}

fshb_ 1370
دوشنبه 25 مرداد 1389, 11:34 صبح
#include<iostream>
using namespace std;
int main()
{
struct candyBar
{
char brand[20];
float weight;
int calory;
};
candyBar *snacks = new snacks;
snacks.brand = "Sample brand";
snacks.weight = 20;
snacks.calory = 4;
}

من ميخوام يه آرایه از candyBar ایجاد کنم، اینی که شما نوشتید یه متغیر از candyBar ایجاد شده.
حالا باید چه جوری این عناصر آرایه رو مقداردهی کنم؟

حامد مصافی
دوشنبه 25 مرداد 1389, 11:43 صبح
#include<iostream>
using namespace std;
int main()
{
struct candyBar
{
char brand[20];
float weight;
int calory;
};
candyBar [2]snacks =
{
{ "Sample brand", 20, 4 },
{ "Sample brand 2", 30, 5 }
};

}

fshb_ 1370
دوشنبه 25 مرداد 1389, 13:50 عصر
#include<iostream>
using namespace std;
int main()
{
struct candyBar
{
char brand[20];
float weight;
int calory;
};
candyBar [2]snacks =
{
{ "Sample brand", 20, 4 },
{ "Sample brand 2", 30, 5 }
};

}

شما سوال من متوجه نشدید، من میخوام یه آرایه 3 تایی از candyBar ايجاى كنم که فضایی که به این آرایه اختصاص داده میشه از طریق new باشه.
حالا نمیدونم باید چه شکلی عناصر این آرایه رو مقداردهی کنم.
مثلا:


*(snacks)->brand="test";
*(snacks)->weight=1.5;
*(snacks)->calory=1;

ولی این error میده.
چه شکلی بنویسم؟:عصبانی++:

BeginnerProgrammer
دوشنبه 25 مرداد 1389, 14:36 عصر
سلام
اگه از وکتور استفاده کنید به نظرم خیلی آسونتر میشه.


#include<iostream>
#include <vector>
using namespace std;
struct candyBar
{
char *brand;
float weight;
int calory;
};
void main(){

vector<candyBar>snack(3);
snack[0].brand="h";
snack[0].calory=40;
snack[0].weight=9.9;
}

برای اضافه کردن بقیه داده ها به snack[1] و snack[2] به همین صورت عمل کنید

Salar Ashgi
دوشنبه 25 مرداد 1389, 14:50 عصر
یه مثال ساده :



#include <iostream>
#include <conio>
#include <string>
using namespace std;
struct candyBar
{
string brand;
float weight;
int calory;
};
int main(){
candyBar *ar = new candyBar[3];
for(int i=0;i<3;i++){
cout<<"Enter brand "<<(i+1)<<":\n";
cin>>ar[i].brand;
cout<<"Enter weight "<<(i+1)<<":\n";
cin>>ar[i].weight;
cout<<"Enter Calory "<<(i+1)<<":\n";
cin>>ar[i].calory;}
cout<<"===================\n";
cout<<"You entered this values :\n";
for(int i=0;i<3;i++)
cout<<(i+1)<<": "<<ar[i].brand<<" , "<<ar[i].weight<<" , "<<ar[i].calory<<endl;
getch();
}



خروجی اجرای برنامه :

http://salarcpp.persiangig.com/new_folder_4/pic.png

موفق باشید ./

fshb_ 1370
سه شنبه 26 مرداد 1389, 07:43 صبح
توی اين سوال نمی خوام از حلقه استفاده کنم. وقتی عناصر رو مقداردهی می کنم، از brand ارور میگیره. چه جوری درستش کنم؟
اینم برنامه:


#include<iostream>
using namespace std;
int main()
{
struct candyBar
{
char brand[20];
float weight;
int calory;
};
candyBar *snacks=new candyBar[3];
snacks[0].brand="test1";
snacks[0].weight=1;
snacks[0].calory=1;

snacks[1].brand="test2";
snacks[1].weight=2;
snacks[1].calory=2;
snacks[2].brand="test3";
snacks[2].weight=3;
snacks[2].calory=3;
cout<<"name: "<<snacks[0].brand<<" ,weight: "<<snacks[0].weight<<" ,calory: "<<snacks[0].calory<<endl;
cout<<"name: "<<snacks[1].brand<<" ,weight: "<<snacks[1].weight<<" ,calory: "<<snacks[1].calory<<endl;
cout<<"name: "<<snacks[2].brand<<" ,weight: "<<snacks[2].weight<<" ,calory: "<<snacks[2].calory<<endl;
}

sh4mid
چهارشنبه 27 مرداد 1389, 13:50 عصر
وقتی brand از نوع string باشه میشه اینجوری مقداردهی کرد


snacks[0].brand="test1";
در حالیکه brand شما از نوع char هست(آرایه)
باید از توابع strcpy یا strncpy استفاده کنی و یا نوع brand رو تبدیل کنی به string
که این مورد آخر به نظزم بهتره

Salar Ashgi
پنج شنبه 28 مرداد 1389, 00:45 صبح
دوست عزیز fshb_ 1370 (http://www.barnamenevis.org/forum/member.php?u=119172) ، عموما بهتره (طبیعتا) ساختارهای داده ای توسط حلقه ها مقدار دهی بشه ،
چون بصورت دستی برنامه ما بسیار غیر بهینه و خسته کننده میشود ؛ اگه تعداد اعضا از Struct شما 30 تا
بود چی ؟! پس بهتره همیشه از روشهای بهینه استفاده کنید ./
در ضمن همانطور که sh4mid (http://www.barnamenevis.org/forum/member.php?u=35307) ، ذکر کردن از این نوع روش مقدار دهی فقط به هنگام تعریف آرایه میتونید استفاده کنید و بعدا باید یا توسط متودهای کلاس String.h یا cin.getline و یا حلقه ها مقدار دهی کنید ./