几个小时以来,我一直在努力寻找方法。如何使程序仅接受1到6之间的值,否则它将崩溃?
“用户仅输入可接受的信用时数-输入的每个信用时数都是0到6之间的整数,并且没有其他值。在这种情况下,任何无效,错误或空的输入数据都将导致运行时错误,这是预期的很好。”
这是我尝试过的不起作用的方法之一。我需要找出如何使程序仅给出运行时错误。我不需要继续要求输入或显示“错误”消息
creditHours = double.Parse(tb_credit.Text);
if (creditHours != 1 || creditHours != 2 || creditHours != 3 ||
creditHours != 4 || creditHours != 5 || creditHours != 6)
{
creditHours = double.Parse(tb_credit.Text);
}
答案 0 :(得分:1)
Mehdi是正确的,但是这就是为什么您的代码不起作用的原因。
假设用户输入“ 2”,然后
if(creditHours != 1 || ...)
{
}
将是真实的,因为creditHours不等于1,它是2。但是假设用户输入“ 9”,if(creditHours != 1 || ...)
仍然是真实的,因为creditHours不等于1,而是9.因此,有效值和无效值都会产生相同的结果。要更正您的代码,您需要if(creditHours == 1 || ...)
。
Mehdi的代码要简单得多,但是我喜欢编写;
if(0 <= creditHours && creditHours <= 6)
{
}
认为它读起来更好。
答案 1 :(得分:0)
if (creditHours < 0 || creditHours > 6)
{
throw new Exception("Credit hours can only be between 0 and 6.");
}
答案 2 :(得分:0)
您的条件不正确,因为如果输入数字为7,则条件 if(creditHours!= 1 || ...)将返回 true 强>。 =>如果(creditHours> 0 && creditHours <6)
如果用户输入的数字无效(例如:“ abc123xyz”),则此代码将引发异常: creditHours = double.Parse(tb_credit.Text) =>您还应该使用TryParse处理无效数字。
请在下面检查我的解决方案:
std::string Shader::readFile(GLenum ShaderType)
{
std::ifstream finV("shader.vert");
std::ifstream finF("shader.frag");
std::string content = "";
if (ShaderType == GL_VERTEX_SHADER)
{
// If the file was opened successfully, continue
if (finV)
{
while (finV)
{
std::string buffer = "";
getline(finV, buffer);
content += buffer + "\n";
}
}
}
else if (ShaderType == GL_FRAGMENT_SHADER)
{
if (finF)
{
while (finF)
{
std::string buffer = "";
getline(finF, buffer);
content += buffer + "\n";
}
}
}
finV.close();
finF.close();
std::cout << content << std::endl;
return content;
}