cin >> gender和cin >> * gender(c型文本字符串)

时间:2019-09-09 23:36:39

标签: c++

我为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;
}

1 个答案:

答案 0 :(得分:2)

要回答标题中的问题:

cin >> *gender将字符写入gender的第一个字节。

cin >> gendergender中写入一个正确的以N结尾的C字符串。

但是,您遇到的特定问题是由于您没有以空值终止gender而引起的。

做完

cin >> *gender;

您应该这样做以空值终止字符串

gender[1] = 0;