c++ - 为什么声明不起作用

标签 c++

我是 C++ 编程的初学者,我应该创建一个程序,其中不满足特定条件的答案会产生特定的语句。 我也加了

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

为了使用

getline 

和 辛

在一起。但是,我想我可能误解了它们的工作原理,我使用了

 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")

或者我就是这样做的

请帮忙...

最佳答案

声明

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

在开始时暂停您的程序,直到您按下 Enter 键。

来自 this :

std::istream::ignore

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

Extract and discard characters

Extracts characters from the input sequence and discards them, until either n characters have been extracted, or one compares equal to delim.

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

这个说法是错误的:

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

您需要将 donorGender 与所有可能的有效值进行比较,而不仅仅是与一个有效值进行比较。即使您将 donorGender != 与所有有效值进行比较,这也不会起作用,因为条件中的 || 运算符将始终评估为 true donorGender 的有效值将是 != 所有有效值的其余部分。将其更改为:

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

通过这些更改,您的程序应该可以按预期运行。 此外,我建议您为您从用户那里获取的所有输入添加一些输入验证。

关于c++ - 为什么声明不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352166/

相关文章:

c++ - system() 函数属于 C 还是 C++?

c++ - 创建没有默认构造函数的对象数组

c++ - 试图理解我在 Opencv 和 C++ 中发现的一些位

c++ - 为什么这不是内存泄漏?或者是吗?删除没有虚拟析构函数的基类指针

c++ - 传递给 std::for_each 时,仿函数能否保留值?

c++ - 嵌套类型 : struct vs class

c++ - 在 GPU 上使用 CUDA 并行化简单算法

c++ - C++中的指针数组以及 "BUS ERROR"是什么

c++ - CGAL 二次规划包找到不正确的解决方案

c++ - kcachegrind:没有可用于以下函数的源