结构值未输出到屏幕

时间:2012-03-22 17:22:51

标签: c++ struct

我正在研究一个程序,其中一部分需要我创建一个名为DETAILS的结构,其中包含字段名称,年龄和高度。我想使用函数参数用数据填充记录。我在这段代码中遇到了很多问题,并且从这里获得了很多帮助,但还需要更多。我无法将填充的结构输出到屏幕。如果有人能帮我解决这件事,我将非常感激!

这是我的代码:

#include <cstdlib>
#include <iostream>
#include <iomanip>

using namespace std;

const int LEN=100;

struct DETAILS
{
 char name[LEN];
 int age;
 double height;
};

 DETAILS fillperson(struct DETAILS David, const char[LEN], int, double);


int main()
{
 struct DETAILS David;

 fillperson(struct DETAILS David, "David Greene", 38, 180.0);

 cout<<David.name<<endl;
 cout<<David.age<<endl;
 cout<<David.height<<endl;

 return 0;
}

DETAILS fillperson(struct DETAILS David, char name[LEN], int age, double height) 
{
 cout<<"Done"<<endl;
 return;
}

2 个答案:

答案 0 :(得分:3)

DETAILS fillperson(David, "David Greene", 38, 180.0); //deprecated conversion from string constant to char * [-Wwrite-Strings]

这是因为字符串文字(例如&#34; David Greene&#34;)是const,而您只是将其作为char[LEN]传递。试试const char[LEN]

DETAILS fillperson(struct DETAILS, char[LEN] name, int age, double height) //expected , or ... before 'name'

[]位于变量名称之后:char name[LEN]

此外,这个David变量来自何处?变量的名称必须位于函数签名中(struct DETAILS David,而不仅仅是struct DETAILS)。

cin>>David.name>>name;

我认为你真正想要的是:

DETAILS fillperson(struct DETAILS David, const char name[LEN], int age, double height)

编辑:

我认为你误解了我说的话。这一行是函数调用函数定义的奇怪组合。

DETAILS fillperson(struct DETAILS David, "David Greene", 38, 180.0);

调用函数时,您不会声明类型:

fillperson(David, "David Greene", 38, 180.0);

但是你确实在实际的函数定义中需要它们,所以不要这样:

DETAILS fillperson(struct DETAILS, char[LEN] name, int age, double height) 

这样做:

DETAILS fillperson(struct DETAILS David, char name[LEN], int age, double height)

编辑2:

另外,我不知道你在这里尝试做什么(或任何类似的行):

cin>>David.name>>name;

您是否正在尝试复制字符串? (参见strncpy)或阅读输入(cin >> David.name)?

建议

如果您正在使用C ++和C ++输入流,那么您应该只使用string

编辑3

您当前的代码因以下几个原因而失败:

DETAILS fillperson(struct DETAILS David, char name[LEN], int age, double height) 
{
    cout<<"Done"<<endl;
    return;
}

函数签名表示函数返回DETAILS(行的第一部分),但是你不返回任何内容。返回输入结构:

return David;

或者让方法返回void(无):

void fillperson(...

我对使用string的建议是,它比直接字符数组(char[])更容易使用:

string name =&#34; David&#34 ;; string name2 = name; //复制更容易

例如,您的代码可能如下所示:

#include <cstdlib>
#include <iostream>
#include <iomanip>

using namespace std;

struct DETAILS
{
    string name;
    int age;
    double height;
};

// Note that I'm passing a reference for DETAILS (the &). This means
// that we have access to the actual DETAILS instance from outside
// the method, not just a copy.
void fillperson(struct DETAILS&, const string, int, double);

int main()
{
    struct DETAILS David;

    fillperson(David, "David Greene", 38, 180.0);

    cout<<David.name<<endl;
    cout<<David.age<<endl;
    cout<<David.height<<endl;

    return 0;
}

void fillperson(struct DETAILS &person, const string name, int age, double height) 
{
    person.name = name;
    person.age = age;
    person.height = height;
    cout<<"Done"<<endl;
}

答案 1 :(得分:1)

person fillperson(struct DETAILS, char[LEN] name, int age, double height)

应该是:

struct person fillperson(struct DETAILS,char name[LEN], int age, double height)

如果没有struct person

的定义,我无法给出更完整的答案

编辑:

这一行没有任何意义:

DETAILS fillperson(struct DETAILS David, "David Greene", 38, 180.0);

也许应该是:

fillperson(struct DETAILS David, "David Greene", 38, 180.0);

如上所述,您不应该在C ++流中使用C风格的字符串。选择一种语言并使用这些结构。