C# в то время как петли и точки с запятой - PullRequest
0 голосов
/ 16 апреля 2020

Я запускаю код, и если я пишу его так:

int num = 0;
while (num++ < 6) ;
{
Console.WriteLine(num);         
}

, я получаю вывод 7

, но если он написан так

int num = 0;
while (num++ < 6)
{
Console.WriteLine(num);         
}

Я получаю выходные данные 1,2,3,4,5,6

Я действительно запутался, почему выходные данные так отличаются, просто добавив дополнительную точку с запятой. Я понимаю, почему это 7 для верхний код, но почему он не показывает все oop всех ответов?

Действительно признателен, если кто-то может объяснить :) Спасибо

Ответы [ 4 ]

2 голосов
/ 16 апреля 2020

Когда вы отлаживаете код, вы видите:

    int num = 0;
while (num++ < 6) ;  //It checks until num>6 (6 times)                            
{                    //without running the code inside the Curly Brackets
Console.WriteLine(num);         // Then it runs just once this line
}

, и это из-за точки с запятой

Для второго варианта

int num = 0;
while (num++ < 6)   // it checks the condition every time
{
Console.WriteLine(num);     // it runs this line of code 6 times    
}
2 голосов
/ 16 апреля 2020

Точка с запятой означает, что целое число, в то время как l oop является этой строкой - это означает, что блок {} впоследствии не является частью l oop - но, скорее, что произойдет дальше.

Так что это :

int num = 0;
while (num++ < 6) ;
{
Console.WriteLine(num);         
}

- это то же самое, что и запись:

int num = 0;
while (num++ < 6) 
{
}
Console.WriteLine(num);         

Видите разницу?

1 голос
/ 16 апреля 2020
int num = 0;                      // num is 0
while (num++ < 6) ;               // the ; makes this "function" repeat until 6 is reached
{                                 // since function above has ; this { does nothing
    Console.WriteLine(num);       // prints where num stopped at, which is 6  
}                                 // since function above has ; this } does nothing

=====================================================================================

/* This function is the same as... */
int num = 0;
while (num++ < 6)
{
    DoNothing();
}

Console.WriteLine(num);

int num = 0;                      // num is 0
while (num++ < 6)                 // no ; makes this "function" do num++ then continue
{                                 // { start of the instructions
    Console.WriteLine(num);       // prints where num stopped at, first round is 1
}                                 // end of the instructions
                                  // will go back to while loop until num reaches 6
1 голос
/ 16 апреля 2020

У меня была эта проблема при выполнении курсовой работы в университете, и я никогда не забывал об этом. Обычно вы завершаете while l oop точкой с запятой, не запуская код внутри. Затем фигурные скобки удаляются компилятором, и в итоге вы получаете следующее:

int num = 0;
while (num++ < 6) {}
Console.WriteLine(num);

Проблема в том, что это ужасно найти и может привести к серьезным ошибкам, если этот код поступит в производство. TBH Я не уверен, почему компиляторы позволяют это или для чего это было бы полезно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...