为什么声明不起作用

时间:2018-01-20 02:59:26

标签: c++

我是c ++编程的初学者,我应该创建一个程序,其中不满足某些条件的答案会产生某些语句。 我还添加了

 cin.ignore(INT_MAX, '\n');

为了使用

getline 

和     cin

在一起。但是,我想我可能误解了它们如何工作的性质而且我使用了

 cin.ignore(INT_MAX, '\n') 

在使用第一个getline函数之前,它导致我的程序暂停。我认为只有在我之前使用cin,并且当我想使用getline函数以防止getline函数占用空白空间时我才应该使用它?

一开始,它导致我的错误,我不确定我何时使用它。 我认为这部分可能是错误......但我并不完全了解||和&&运营商工作

else if (donorGender != "Male" || "Female" || "Trans Male" || "Trans Female" || "Queer" || "Different")

这就是我这样做的方式吗?

else if (donorGender != "Male" && donorGender != "Female" && donorGender != "Trans Male" && donorGender != "Trans Female" && donorGender != "Queer" && donorGender != "Different")

或者这就是我这样做的方式

请帮忙......

2 个答案:

答案 0 :(得分:2)

您的代码表示它会测试donorName其他donorGender,依此类推。你需要检查所有条件。和donorGender检查if语句格式是否正确。 如果用户输入的名称和性别均无效,该怎么办?

我认为你不应该检查其他条件,如果错误的话。如果你想告诉所有错误的东西,那么方法是不同的。但在你的情况下,代码可以帮助。尝试一下!

嵌套条件语句

if(donorName != "") 
{
    if(donorGender == "Male" 
        or donorGender == "Female" 
        or donorGender == "Trans Male" 
        or donorGender == "Trans Female" 
        or donorGender == "Queer"
        or donorGender =="Different") 
    {
        if(donorAge >= 0) {
            if(donorWeight >= 0) {
                if (donorHeight >= 0)
                {
                    cout << "--- You must enter a valid height." << endl;
                    return (-1);
                }
                else {

                }
            }
            else {
                cout << "--- You must enter a valid weight." << endl;
                return (-1);    
            }
        }
        else {
            cout << "--- You must enter a valid age." << endl;
            return (-1);
        }
    }
    else {
        cout << "--- You must enter a valid gender." << endl;
        return(-1);
    }
} 
else {
    cout << " --- You must enter a valid name." << endl;
    return (-1);
}

答案 1 :(得分:2)

声明

cin.ignore(INT_MAX, '\n');

在您开始暂停您的计划,直到您按下Enter键。

来自this

  

的std :: istream的::忽略

     

istream的&安培; ignore(streamsize n = 1,int delim = EOF);

     

提取并放弃字符

     

从输入序列中提取字符并丢弃它们,直到提取了n个字符,或者一个比较等于delim。

通常情况下,cin.ignore(INT_MAX, '\n')getline一起使用,如果您在调用cin之前使用getline有其他输入语句,那么当用户输入cin的内容时,他们点击Enter键,\n(换行符)字符进入输入缓冲区。然后,如果您的程序调用{​​{1}},它将获取换行符而不是您想要的字符串。在您的程序中,您正在使用getline作为用户的第一个输入,因此您不需要它。您可以安全地从程序中删除getline语句。

这句话错了:

cin.ignore

您需要将else if (donorGender != "Male" || "Female" || "Trans Male" || "Trans Female" || "Queer" || "Different") 与所有可能的有效值进行比较,而不仅仅是一个有效值。即使您将donorGender与所有有效值进行比较,这也无效,因为条件中的donorGender !=运算符将始终评估为||,因为true的有效值为{{} 1}}其余所有有效值。将其更改为:

donorGender

通过这些更改,您的程序应该按预期工作。 另外,我建议你为用户提供的所有输入添加一些输入验证。