我正在研究一个程序,其中一部分需要我创建一个名为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;
}
答案 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)
另外,我不知道你在这里尝试做什么(或任何类似的行):
cin>>David.name>>name;
您是否正在尝试复制字符串? (参见strncpy)或阅读输入(cin >> David.name
)?
如果您正在使用C ++和C ++输入流,那么您应该只使用string
。
您当前的代码因以下几个原因而失败:
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风格的字符串。选择一种语言并使用这些结构。