2015-01-28 3 views
-4

это мой текущий код, моя команда else не работает. как я могу это сделать, если кто-то набрал что-то, что не признано, консоль пишет им извините, что это справочная команда типа справки для списка команд, но она не записывает это, если команда распознана, если команда распознанапроблема с командами «else»

namespace ConsoleApplication1 

{ 
class Program 
{ 

    static void Main(string[] args) 
    { 



     Console.WriteLine("Enter your name"); 
     string UserName = Console.ReadLine(); 
     Console.WriteLine("hello {0} what would you like me to do", UserName); 
     do 
     { 
      string line = Console.ReadLine(); 
      if (line == "time") Console.WriteLine("its {1}", UserName, System.DateTime.UtcNow); 
      if (line == "help") Console.WriteLine("TIME: shows current time and date"); 
      if (line == "easter egg") Console.WriteLine("this code does funk all"); 
      if (line == "easter egg") Console.WriteLine("well done on finding an easter egg {0}", UserName); 
      if (line == "juggle") Console.WriteLine("im sorry {0} but im not very good at party tricks", UserName); 
      if (line == else) Console.WriteLine("im sorry that is an unrecognzied commands type help for a list of commands"); 

      Console.WriteLine("anything else"); 

     } 
     while (string.Equals(Console.ReadLine(), "yes", StringComparison.InvariantCultureIgnoreCase)); 
    } 
} 
} 
+6

Посмотрите на переключатель/случай на https://msdn.microsoft.com/en-us/library/06tc147t.aspx вашей остальное как "по умолчанию" – realbart

+1

Что 'если (строка == еще)' должен делать? Это даже не будет компилироваться. –

+0

Ваш синтаксис неверен в инструкции If, вам нужны фигурные скобки. – Brandon

ответ

8

Возможно, ваш код должен выглядеть следующим образом:

if (line == "time") 
    Console.WriteLine("its {1}", UserName, System.DateTime.UtcNow); 
else if (line == "help") 
    Console.WriteLine("TIME: shows current time and date"); 
else if (line == "easter egg") 
    Console.WriteLine("this code does funk all"); 
else if (line == "easter egg") 
    Console.WriteLine("well done on finding an easter egg {0}", UserName); 
else if (line == "juggle") 
    Console.WriteLine("im sorry {0} but im not very good at party tricks", UserName); 
else 
    Console.WriteLine("im sorry that is an unrecognzied commands type help for a list of commands"); 

Но двойная проверка if (line == "easter egg") с другим результатом выглядит странно для меня, и в этом случае вторая ветвь «пасхальное яйцо» никогда не будет выполнена. Наверное, здесь есть опечатка?

Или, если предполагается, что часть кода в отношении филиала «пасхальное яйцо» должен выглядеть

else if (line == "easter egg") 
{ 
    Console.WriteLine("this code does funk all"); 
    Console.WriteLine("well done on finding an easter egg {0}", UserName); 
} 
+1

Строка 'Консоль.WriteLine («хорошо сделано при нахождении пасхального яйца {0}», UserName); 'wont execute, чтобы быть идентичным ранее, вам нужно было бы поставить оба оператора в один и тот же блок' if' – Matthew

+0

@Matthew да, я уже видел это и обновлял ответ. Вероятно, это просто опечатка или копирование вопроса OP - я не знаю. Возможно, в этом случае должно быть напечатано две строки - это зависит от OP. –

+0

спасибо большое, я понимаю сейчас –

1

Вы не используете если/другое заявления должным образом, вот как их использовать.

 if (line == "time") {Console.WriteLine("its {1}", UserName, System.DateTime.UtcNow);} 
     else if (line == "help") {Console.WriteLine(string.Format("TIME: {0}", DateTime.Now);} 
     else if (line == "easter egg") {Console.WriteLine("this code does fuck all");} 
     else if (line == "easter egg") {Console.WriteLine("well done on finding an easter egg {0}", UserName);} 
     else if (line == "juggle") {Console.WriteLine("im sorry {0} but im not very good at party tricks", UserName);} 
     else { Console.WriteLine("im sorry that is an unrecognzied commands type help for a list of commands");} 
8

Более применим в данном конкретном случае будет switch заявления. Это здорово, когда вам нужно выполнить другой код на основе одного входного значения.

switch(line) 
{ 
    case "time":  Console.WriteLine("its {1}", UserName, System.DateTime.UtcNow); break; // By the way, why pass in UserName if you aren't going to use it? 
    case "help":  Console.WriteLine("TIME: shows current time and date"); break; 
    case "easter egg": Console.WriteLine("well done on finding an easter egg {0}", UserName); break; 
    case "juggle":  Console.WriteLine("im sorry {0} but im not very good at party tricks", UserName); break; 
    default:   Console.WriteLine("im sorry that is an unrecognzied commands type help for a list of commands"); 
} 

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

2

То, как вы пытаетесь написать свой код, не так, как работают инструкции/else. Правильный синтаксис:

if (a == 0) 
{ 
    // do something when a is 0 
} 
else 
{ 
    // do something when a isn't 0 
} 

Если у вас есть несколько случаев, чтобы проверить можно добавить else if.

if (a == 0) 
{ 
    // do something when a is 0 
} 
else if (a < 0) 
{ 
    // do something when a is less than 0 
} 
else 
{ 
    // do something when a is greater than 0 
} 

В вашем случае вы проверяете, имеет ли одна переменная одно из нескольких значений. Этот шаблон достаточно распространен, он имеет собственный синтаксис. Он называется оператором switch.

switch(line) 
{ 
    case "time": 
     // do something when value is "time" 
     break; 
    case "help": 
     // do something when value is "help" 
     break; 
    default: 
     // do something when value is any value that you did not explicitly list 
     break; 
} 

Обратите внимание на случай default в инструкции переключателя. Это то, чего вы пытаетесь достичь с неправильным предложением line == else.

1

Причина, по которой она не работает, заключается в том, что else является зарезервированным ключевым словом. else является частью самого заявления if, вы не можете сравнить значение с другим. См. This link, чтобы узнать больше о if - else.

Как другие решили, что уже используют инструкции if-else, вот пример с коммутационным футляром. Это немного другая конструкция, но работает практически так же.

string line = Console.ReadLine(); 
switch(line) 
{ 
    case "time": 
     Console.WriteLine("its {1}", UserName, System.DateTime.UtcNow); 
     break; 
    case "help": 
     Console.WriteLine("TIME: shows current time and date"); 
     break; 
    case "easter egg": 
     Console.WriteLine("this code does fuck all"); 
     Console.WriteLine("well done on finding an easter egg {0}", UserName); 
     break; 
    case "juggle": 
     Console.WriteLine("im sorry {0} but im not very good at party tricks", UserName); 
     break; 
    default: 
     Console.WriteLine("im sorry that is an unrecognzied commands type help for a list of commands"); 
     break; 
} 
Смежные вопросы