2010-05-24 2 views
5

Извините, что спросила об этом, так как мне показалось, что я знаю ответ, я хочу выйти из программы, если имя пользователя больше 4 символов или имя пользователя не является учетной записью, называемой учеником. Однако это даже если имя_пользователя всего 3 символа и не является студентом, я все еще нахожусь в приложении Application.Exit. Что я делаю не так?C# simple IF OR question

if (userName.Length > 4 | userName != "student") 
{ 
    Application.Exit(); 
} 

Позор мне :-(

+0

это утверждение бессмысленно, потому что приложение не выйдет только в том случае, если userName является «учеником». – Andrey

+0

Что мне нужно было &&, как показано ниже, спасибо всем! :-) if (userName.Length> 4 && userName! = "Student") { Application.Exit(); } – Jamie

+0

@ Джейми, это снова бесполезно. '" student ".Length' is> 4 anyway :) – Andrey

ответ

15

В то время как вы должны использовать || вместо |, они принесут тот же результат в этой ситуации. Несмотря на то, что ответы других ответов, изменение | на || будет не решить вашу проблему.

Ваша настоящая проблема в том, что условия, которые вы хотите проверить, всегда будут правдой. Либо ваше имя пользователя не student, либо student, а затем оно также длиннее 4 символов.

Если у вас есть имя пользователя, всего 3 символа, оно не равно студенту, поэтому программа завершает работу.

Из вашего описания того, что вы ожидаете, я думаю, что вы имеете в виду это:

if (userName.Length > 4 && userName != "student") 
{ 
    Application.Exit(); 
} 
+0

Большое спасибо за это :-) – Jamie

6

Вы должны использовать логическое ИЛИ (||) оператор вместо побитового ИЛИ (|)

Как я уже говорил в моих комментариях, хотя, логику . не обязательно имеет никакого смысла для меня так, как это сочинительство, утверждение всегда будет верно:

  • Если имя_пользователя не студент, то утверждение true, и приложение завершает работу.

  • Если userName является учащимся, то длина> 4 и утверждение снова истинно (что вызывает выход).

Вы можете изменить вещи:

if(username.Length > 4 && userName != "student") 
{ 
    Application.Exit(); 
} 

Что делает больше смысла логически, но так как я не знаю ваши намерения, я не могу гарантировать, что он будет работать так, как вы хотите его ,

+0

'if (userName.Length> 4 || userName! =" Student ")' означает меньше? – Andrey

+0

Может ли это лучше использовать Form.Close вместо Application.Exit также (если возможно) http://stackoverflow.com/questions/1057151/application-exit –

+0

@Andrey Вы правы, логика заявления не ясность ... но я не вижу, чтобы остальная часть его/ее кода знала, какова будет правильная логика. все, что я вижу, это то, что он явно использует неправильного оператора для сравнения. –

0
if (userName.Length > 4 || userName.ToLower() != "student") 
{ 
    Application.Exit(); 
} 

Попробуйте это.

+0

Уведомление ToLower() – kd7

+0

'ToLower()' может быть небрежным в зависимости от того, как пользовательский интерфейс принимает ввод. Кроме того, это может быть чувствительное к регистру имя пользователя ... – James

+0

все еще безопаснее imo, иногда вам интересно, почему я не нахожусь в состоянии, а это просто вопрос. – kd7

0

Глядя на ваше требование чек на длину символов является negligable или, по крайней мере, вы не упомянули причину, почему вы хотите проверить длину символа. Из примера, который вы предоставили, я просто проверил бы if (userName != "student"). Я не вижу необходимости в дополнительной проверке, это то, что может быть принудительно в пользовательском интерфейсе.

0

Если я не ошибаюсь, вы пытаетесь войти в цикл if, если любое из условий истинно. т. Е. Ввести в петлю if

  1. , если длина больше.
  2. когда имя_пользователь не должен быть равен «студент»

состояние, как имя пользователя = «ABC» не «студент», ваше состояние по-прежнему прямо и вступит. Он будет выполняться еще, когда userName равно = «student»;

Здесь вы должны использовать оператор AND, чем оператор OR.

if (userName.Length > 4 & userName != "student") 
    { 
    Application.Exit();     
    } 

Вы также можете достичь того же результата с & & оператора. & Оператор такой же, как & & Оператор. , когда X = false и Y истинно; Y не будет оцениваться вообще. Поскольку X уже ложно. это метод также вызывает короткое замыкание.