注册 登录
编程论坛 C++教室

new分配动态结构数组空间怎么不成

abigboy 发布于 2013-06-03 21:43, 3490 次点击
#include<iostream>
    using namespace std;
struct pisa
{
    char name[10];
    int zj;
    int zl;
};
int main()
{
//    using namespace std;
    pisa p;
     p=new pisa[2];
    for(int i=0;i<2;i++)
    {
        cout<<"请输入比萨的no. "<<i<<"公司名称"<<endl;
        cin.get(p[i]->name,10);
        cout<<"请输入比萨"<<i<<"的直径"<<endl;
        cin>>p[i]->zj;
        cout<<"请输入比萨"<<i<<"的重量"<<endl;
        cin>>p[i]->zl;        
    }
    for(int i=0;i<2;i++)
    {
        cout<<"公司"<<i<<"名称:"<<p[i]->name<<","<<i<<"直径:"<<p[i]->zj<<","<<i<<"重量:"<<p[i]->zl<<endl;
    }
    delete []p;
    return 0;
}
7 回复
#2
rjsp2013-06-03 22:15
pisa* p = new pisa[2]
#3
lzj125302013-06-04 11:00
pisa p;
     p=new pisa[2]
你初始化的是一个结构体数组,就不能用这种方式初始化,必须使用指针指向数组的首地址。就像二楼一样
#4
abigboy2013-06-04 16:50
回复 3楼 lzj12530
我按照二楼那样声明之后 还是不能分配成功这是为什么
#5
abigboy2013-06-04 16:51
回复 2楼 rjsp
我按照你的方法进行分配为啥还是不行   顺便问问为啥我那样分配是错误的
#6
rjsp2013-06-05 08:41
程序代码:
#include <iostream>
#include <string>
using namespace std;

struct pisa
{
    string name;
    int zj;
    int zl;
};

int main()
{
    pisa* p = new pisa[2]; // 其实C/C++都不建议你滥用动态分配
    for( int i=0; i<2; ++i )
    {
        cout<<"请输入比萨的no. "<<i<<"公司名称"<<endl;
        cin >> p[i].name;
        cout<<"请输入比萨"<<i<<"的直径"<<endl;
        cin >> p[i].zj;
        cout<<"请输入比萨"<<i<<"的重量"<<endl;
        cin >> p[i].zl;
    }
    for( int i=0; i<2; ++i )
    {
        cout<<"公司"<<i<<"名称:"<<p[i].name<<","<<i<<"直径:"<<p[i].zj<<","<<i<<"重量:"<<p[i].zl<<endl;
    }
    delete[] p;

    return 0;
}
#7
rjsp2013-06-05 08:43
如果 公司名 包含空格的话,将 cin >> p[i].name; 改为 getline( cin, p[i].name );
#8
abigboy2013-06-05 17:22
回复 7楼 rjsp
恩 明白了谢谢大神
1