检查字符串是否与某些东西不相等

时间:2016-04-22 13:23:23

标签: c# string console

这是我的代码:

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"或"女孩"以及如何解决这个问题。

3 个答案:

答案 0 :(得分:9)

简单逻辑:

Sex != "boy" || Sex != "girl"

永远是真的。

您需要使用

Sex != "boy" && Sex != "girl"

代替。

一些额外的说明:

  • C#支持运算符重载并且它是常用的,因此您可以使用==!=来表示字符串。
  • 请勿使用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)

允许的值为boygirl

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);
}