这是我的代码:
using System;
namespace FirstProgram
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine ("What is your first name?");
String Name = Console.ReadLine ();
Console.WriteLine ("\nHi " + Name + "! Now tell me are you a boy or girl?");
String Sex = Console.ReadLine ();
if (!Sex.Equals ("boy") || !Sex.Equals ("girl")) {
Console.WriteLine ("\nERROR: You were supposed to type 'boy' or 'girl'\nPress any key to exit...");
Console.ReadKey ();
System.Environment.Exit (1);
}
Console.WriteLine ("\nOk so your name is " + Name + " and your are a " + Sex + "... Please tell me your age :)");
int Age = Convert.ToInt32 (Console.ReadLine ());
Console.WriteLine ("\nYou are " + Age + " years old!");
Console.ReadKey ();
}
}
}
我只是想知道为什么程序会退出,即使我输入" boy"或"女孩"以及如何解决这个问题。
答案 0 :(得分:9)
简单逻辑:
Sex != "boy" || Sex != "girl"
永远是真的。
您需要使用
Sex != "boy" && Sex != "girl"
代替。
一些额外的说明:
==
和!=
来表示字符串。Environment.Exit
,仅使用return
。如果您需要返回错误代码,请将Main
的签名更改为int Main()
和return 1;
。但请注意,在Windows上,应用程序可能会认为返回非成功代码的应用程序以某种方式失败并报告它 - 例如Total Commander会弹出一条消息。\n
。要么使用Environment.NewLine
,要么坚持使用Console.WriteLine
作为终结。string.Format
来拼接复杂的字符串:string.Format("Your name is {0} and your age is {1}.", Name, Age). If you're on C# 6+, string interpolation is even nicer:
$(“你的名字是{Name},你的年龄是{Age}。”)`。Sex.Equals("boy", StringComparison.CurrentCultureIgnoreCase)
。答案 1 :(得分:4)
您需要将if语句从“OR”更改为“AND”:
if (!Sex.Equals ("boy") || !Sex.Equals ("girl"))
如果满足其中一个条件,则“OR”语句的计算结果为true。因此,如果输入“boy”,则第二个语句!Sex.Equals("girl")
为true,因此它会执行if语句中的代码。
相反,使用“AND”语句,仅当两个参数都为真时才计算为true。
if (!Sex.Equals ("boy") && !Sex.Equals ("girl"))
答案 2 :(得分:1)
允许的值为boy
或girl
:
Sex.Equals ("boy") || Sex.Equals ("girl")
不允许使用其他值:
!( Sex.Equals ("boy") || Sex.Equals ("girl") )
然后,你的if必须是:
if ( !( Sex.Equals ("boy") || Sex.Equals ("girl") ) )
{
...
System.Environment.Exit(1);
}
或者这个
if ( ! Sex.Equals ("boy") && !Sex.Equals ("girl") ) )
{
...
System.Environment.Exit(1);
}