正如@SornelHaetir 指出的那样,第一个问题是您试图将title 分配给只能包含一个字符的变量。相反,您应该使用 char 数组、char 指针甚至字符串对象来包含您的多字母值。在下面的代码示例中,我使用固定大小为 25 的 char 数组来存储标题。请注意,您最多只能在其中存储 24 个字符,因为 char 数组需要特殊字符来表示 char 数组的结尾。否则,它最终会在您想要的值之后写入 junk 。那个特殊字符是空终止字符,写成'\0'。
在您的 void displayBid(Info itemOne); 函数中使用 return; 语句是完全没有必要的。虽然您可以使用return; 来停止函数的执行,但您将它放在函数的末尾,该函数即将以正常方式结束,但您无缘无故地强迫它。此外,对于返回 void 的函数,您不需要任何 return; 语句——什么都没有。
那么,fund 和 bidAmount 代表货币价值,可能是整数值,也可能不是整数值,因此您应该考虑使用 float 或 double 数据类型来存储货币价值。
接下来是你的函数Info getBid();。首先,我不得不说命名可能有点混乱。如果您在没有看到其实际代码的情况下阅读该函数的名称,您将如何理解它可能会做什么?对我来说,这听起来像是要让我获得有关出价的信息,而实际上它正在设置它。其次,您可以简化输入值的代码,就像我在代码示例中所做的那样。您尝试使用不同技术从用户输入中获取值的方式有点错误。 getline 是与 istream 对象一起使用的成员函数。您的 istream 对象是 cin。为了访问该成员函数,您应将其写为cin.getline(待讨论);。该功能仅适用于字符。它的第一个参数接受指向字符序列中第一个字符(第一个字符的地址)的指针。
第二个参数是整数数据类型,指定要从输入中提取多少字符并存储在代替第一个参数的参数中。注意不要写,例如 25,因为在 char 数组中你必须为 '\0' 字符留一个位置,它会自动放置在它需要的位置。 getline 成员函数也有默认分隔符'\n',表示换行。这意味着您可以输入的字符少于函数可以提取的字符,因为一旦从用户输入中读取该分隔符值,提取就会停止。虽然,如果您想要特定的分隔符,getline 成员函数有其重载版本,第三个参数是您输入所需分隔符作为参数的地方。 (重载的函数基本上是同名的函数,但参数不同。它们提供相同的功能但实现不同。)
即使您已为出价设置了值,您也从未从函数中返回它。您正确地说它的返回值为Info,但您没有返回它。实际上,您在其正常退出之前再次退出。相反,你应该写 return itemOne; 在我的代码示例中,我通过引用传递了在 int main(); 函数中创建的变量,这意味着它不是通常的副本,所以我不必返回它并分配给另一个变量相同类型以适当地应用所需的更改。
最后,在int main(); 函数中,您可以只声明int choice,而不对其进行初始化,并按照我的方式使用do-while 循环。此外,switch 语句提供了定义如果所有情况都不为真时会发生什么,就像在所有情况下你写default: 一样,在它下面写下你想要发生的任何事情。在您的代码示例中,即使用户输入除 1、2 以外的任何内容(定义为停止执行的 9 除外),您的函数也将继续执行。在我的代码示例中,除了 1 和 2(包括零)用户输入的任何内容,函数都将退出。好吧,除了换行。
然后,让我们再次讨论命名。您的数据结构名称必须直接暗示它是什么。 Info 不这样做。该名称实际上更适合您的 void displayBid(Info itemOne); 函数被调用。在我的代码示例中,我将其重命名为 Bid。
#include <iostream>
using namespace std;
struct Bid
{
char title[25];
int vehicleID;
double fund;
double bidAmount;
};
void GetBid(Bid item)
{
cout << "Title: " << item.title << endl;
cout << "Fund: " << item.fund << endl;
cout << "Vehicle: " << item.vehicleID << endl;
cout << "Bid Amount: " << item.bidAmount << endl;
}
void SetBid(Bid & item)
{
cout << "Enter title: ";
cin >> item.title;
cout << "Enter fund: ";
cin >> item.fund;
cout << "Enter vehicle ID: ";
cin >> item.vehicleID;
cout << "Enter amount: ";
cin >> item.bidAmount;
}
int main()
{
Bid item;
int choice;
do {
cout << "Menu:" << endl;
cout << " 1. Enter Bid" << endl;
cout << " 2. Display Bid" << endl;
cout << " 0. Exit" << endl;
cout << "Enter choice: ";
cin >> choice;
switch (choice)
{
case 1:
SetBid(item);
break;
case 2:
GetBid(item);
break;
default:
choice = 0;
cout << "Goodbye." << endl;
break;
}
} while (choice != 0);
return 0;
}