我很难尝试使用cin接受输入,将它们保存到一些变量,然后构建一个类。当我输入第一个输入时,程序无限循环而不是等待下一个输入,而是一遍又一遍地显示提示。
课程是:
class person {
public:
char *name;
char *email;
int phone;
// constructor that uses the parameters to initialize the class properties
person(char *cName, char *cEmail, int iPhone) {
name = new (char[32]); // acquiring memory for storing name
email = new (char[32]); // acquiring memory for storing email
strcpy(name, cName); // initialize name
strcpy(email, cEmail); // initialize email
phone = iPhone; // initialize phone
}
virtual ~person() {
delete[] name;
delete[] email;
}
};
输入和构造函数调用如下:
char* nameIn = new (char[32]); // acquiring memory for storing name
char* emailIn = new (char[32]);
int iPhoneIn;
cout << "Enter name, email, and phone:\n";
cin >> *nameIn;
cin >> *emailIn;
cin >> iPhoneIn;
person* newPerson = new person(nameIn, emailIn, iPhoneIn); //create node
答案 0 :(得分:2)
您可以通过几种方式修复/改进代码。
首先,我们从明显的错误开始。当您从cin读取输入时,请不要取消引用(调用*运算符)您的角色指针( char * )。 cin应该收到 char * ,而不是 char 。如果你传递一个 char ,它只会写你输入的第一个字符。因此,如果要输入字符串,则需要传递 char * 。
cin >> *nameIn; // this should be: cin >> nameIn;
cin >> *emailIn; // this should be cin >> emailIn;
使用和不使用建议的更改运行此代码段以查看我的意思:
#include <iostream>
using namespace std;
int main() {
cout << "Input a string: ";
char * c = new(char[200]);
cin >> *c; // only writes the first input character. Change to: cin >> c;
cout << "You input: " << c; // prints the first input character then garbage
delete[](c);
return 0;
}
其次,不代表整数的电话号码。 int phone;
无法使用标准的10位数电话号码。在大多数平台上,可以用整数表示的最大值约为21亿。大多数10位数字大于21亿。请改用字符数组。相应地调整输入法。
第三,不要不必要地动态分配内存。如果您从一开始就知道所有名称都适合32个字符,那么请将它们声明为。
char *name; // change to char name[32];
char *email; // change to char email[32];
这样可以更快地运行并为您节省必须释放已分配内存的痛苦。您将能够完全删除析构函数。