我为c样式文本字符串的可变性别动态分配了内存。之后,我初始化了temp_g1和temp_g2,以便可以在while循环中进行足够的比较,如果输入的性别有效或无效,它将进行比较。因此,当您编译程序时,我有点困惑,因为当我将cin用作cin >> gender时,没有问题,并且一切正常,但使用cin >> * gender时,并没有按需进行比较。
这里是代码,请注意,我使用了cin >> * gender。
#include<iostream>
#include<cstring>
using namespace std;
int main() {
char *gender = new char[2];
const char temp_g1[2] = "M";
const char temp_g2[2] = "F";
cout << "Enter gender(M/F): "; cin >> *gender;
while (stricmp(gender, temp_g1) != 0 && stricmp(gender, temp_g2) != 0) {
cout << "Error\n";
cout << "Enter gender: "; cin >> *gender;
}
delete[]gender; gender = nullptr;
system("pause");
return 0;
}
答案 0 :(得分:2)
要回答标题中的问题:
cin >> *gender
将字符写入gender
的第一个字节。
cin >> gender
向gender
中写入一个正确的以N结尾的C字符串。
但是,您遇到的特定问题是由于您没有以空值终止gender
而引起的。
做完
cin >> *gender;
您应该这样做以空值终止字符串
gender[1] = 0;