codeasy .net
or Sign Up
C# Beginner > 1 Repairing Noname > Introduction to while loop

antivirus

Antivirus Scan

The day finally came when Noname called me back down to the basement to help him with one of his modules. Finally! One step closer to returning to my own time.

As soon as I keyed in the secret code, I heard his robotic voice. "Hi! Haven't seen you for a while!" Noname said.
"Hi, Noname," I returned. "Nice to see you too! Let's get started ASAP - I want to get back into my time!
"Let's start with my antivirus protection system." Noname suggested.
"What should I do?"

"My problem is not with the antivirus detection itself, but in running the scan. As you know, Ritchie did everything to control me. Part of that was adding a remote access to my system that he can connect to and check what I'm doing. An antivirus check is forbidden for me - if he sees that I'm checking for viruses, he'll immediately turn me off. I need help with scanning my files quickly and then being able to stop scanning as soon as Ritchie connects."

I took a few seconds to think through the problem. "If I know the number of files to scan," I thought out loud, "I can write a for loop to iterate through all of the files to scan them." I suggested.
"And when Ritchie connects, how will the scan stop if Ritchie connects to the system?"
"I haven't thought that far ahead yet," I admitted. "Do you have anything in mind?"
"Well, if you're open to learning, I could teach you how to use a while loop." Noname replied.
"Sounds good," I said. "Enlighten me!"

Feed me with knowledge

While Loop

"Ok, my dear human, listen up. Some programmers call the for loop a "loop with a known number of repetitions". That's because when you see a for loop, it's typically pre-programmed to run a specified number of times; 5, 10, etc. In contrast, a while loop is a "loop with an unknown number of repetitions" because you don't really know how many times it will iterate. Here is a while loop syntax in C#:

while (/* condition */)
{
    // while loop body
}

A while loop executes a code in its body while a a specified condition is true. As soon as that condition is false, the loop terminates. The condition has a bool type. This diagram illustrates the basics of a while loop:

C# while loop

Take a look at some examples:

while (true) // Executes forever
{
    Console.WriteLine("Never Stop!");
}
while (false) // Never executes
{
    Console.WriteLine("Never execute");
}
bool iNeedMoreCandies = true;
int candiesCount = 0;

while (iNeedMoreCandies)
{
    Console.WriteLine("One more candy?");

    string answer = Console.ReadLine();
    if (answer == "Yes")
    {
        candiesCount++;
    }
    else
    {
        iNeedMoreCandies = false;
    }
}

"See those examples I just showed you?" Noname asked. "The first two examples are trivial. But the last one is interesting. Do you understand what is it doing?"
"Let's see. It looks like it asks the user if they want one more candy. As long as the user enters 'Yes,' it increments the candy count. As soon as the user answers anything but 'Yes,' it stops the loop."
"Correct! You're a quick learner, Teo. Now let's get you Writing your first while loop."

First c sharp while loop

Write a salary negotiation program that tells the user "I will give you {number} dollars, ok?" starting from 100. Every time the user answers "more", it increases the number by 100. If the user answers "ok", program outputs "Your salary is {number} dollars." and exits. For example:
I will give you 100 dollars, ok?
>more
I will give you 200 dollars, ok?
>more
I will give you 300 dollars, ok?
>ok
Your salary is 300 dollars.

Write a program that reads an integer from the console. The integer should be a power of two: 2, 4, 8, 16, 32, etc. Then your program should divide it by 2 and output every division result to the console, until it reaches number 1. Print out each result to a new line. Use a while loop. For example:
>16
8
4
2
1

"Do you want to know a secret, Teo?" Noname asked.
"Sure!" I answered.
"You can omit the enclosing brackets if you have a single command in a for or while loop; just the same as you can in an if statement. Here is a demonstration:

for(int i = 0; i < 10; i++)
    Console.WriteLine("Print me!");
while(someBool)
    Console.WriteLine("Print me!");

You can also replace a for loop with a while loop, and vice-versa. In the below example, the code snippets in the left and right colums of the following table are equivalent:

For loopWhile loop
for(int i = 0; i < 10; i++)
{
    Console.WriteLine("Print me!");
}
int repetitions = 10;
while(repetitions > 0)
{
    Console.WriteLine("Print me!");
    repetitions--;
}
int candiesCount = 0;

for (string input = "Yes";
    input == "Yes"; 
    input = Console.ReadLine())
{
    Console.WriteLine("One more candy?");
    candiesCount++;
}
bool iNeedMoreCandies = true;
int candiesCount = 0;

while (iNeedMoreCandies)
{
    Console.WriteLine("One more candy?");

    string answer = Console.ReadLine();
    if (answer == "Yes")
    {
        candiesCount++;
    }
    else
    {
        iNeedMoreCandies = false;
    }
}

"Now that you have some practice with these loops, let's talk about strategy. Try to stick to this rule: if you know during compile time how many times your code will be executed, consider using a for loop; othervise, use a while loop."
"Noname, in that code you showed me, what does repetitions-- do?"

The -- operater decrements the named variable by one. This is the same as repetitions = repetitions - 1 There are actually 4 different operators: i++, ++i, i--, and --i. When the symbols are placed before the variable, it's called a prefix operator. When applied after the variable, it's called called a postfix operator. The prefix operators change the value of the variable first and then return the result. Postfix operators return the current variable value and then change it.

Operator NameUsageEquivalent CodeTypes
Postfix increment
i++
i = i + 1
byte
sbyte
char
decimal
double
float
int
uint
long
ulong
short
ushort
Prefix increment
++i
i = i + 1
Postfix decrement
i--
i = i - 1
Prefix decrement
--i
i = i - 1

"Wow," I said, "it turns out that there are many more standard types in C# than I thought."
"Yes and no." Noname replied. "Many of them are actually quite similar, but we'll leave the details for next time."
"I'll confess Noname, I don't quite understand the prefix/postfix difference. What's the difference between i++ and ++i in the code? In the table you showed me, both prefix and postfix have the same 'equivalent code'."
"Yes, it is confusing for the human brain. Here are some examples that might help illustrate it."

int i = 2;
Console.WriteLine(i++); // Outputs 2
Console.WriteLine(i);   // Outputs 3
int i = 2;
Console.WriteLine(++i); // Outputs 3
Console.WriteLine(i);   // Outputs 3

In the first example we are using a postfix increment. Hence, first the current 'i' value is printed to the console. That value is 2. After the write, we increment 'i', which is when it becomes 3. The next time we call Console.WriteLine, the value of 'i' is 3.

The second example uses a prefix increment. 'i' is incremented first and then its new value (3) is output to the console.
Note that the priority of the mathematical operations like +, -, *, and / are lower than increment and decrement. That means that the increment/decrement part will be calculated before any operation in between those increments/decrements.

int number = 1;
int result = ++number + ++number;
Console.WriteLine(number);  // Outputs 3
Console.WriteLine(result);  // Outputs 5

In other terms, the above code is equivivalent to:

int number = 1;
number = number + 1;
int result = number;
number = number + 1;
result = result + number;

Console.WriteLine(number);  // Outputs 3
Console.WriteLine(result);  // Outputs 5

"Still a little complicated, Noname." I said, a little exasperated.
"Don't worry, Teo. You can use either of those in your code. Unless you're doing something complicated, postfix vs. prefix doesn't usually matter, but it is very good to know the difference!" Noname replied and continued, "To make your loop knowledge complete, I want to tell you about nested loops.

Nested loops

The term "nested" can be applied to the loop that is inside another loop. Take a look at this example:

for(int i = 0; i < 3; i++) // This loop executes the inner loop 3 times
{
  for(int j = 0; j < 3; j++) // This loop draws the row of 3 stars
  {
    Console.Write("*");
  }
  Console.WriteLine(); // Here we go to the new line after the row is completed
}
// Outputs:
***
***
***

"The most important trick about them is that all variables created in the inner loop get destroyed when the outer loop iterates."
Same as with for loops, you can create nested while loops:"

int i = 0;
while(i < 3) // This loop executes the inner loop 3 times
{
    int j = 0;
    while (j < 3) // This loop draws the row of 3 stars
    {
        Console.Write("*");
        j++;
    }
    Console.WriteLine(); // Here we go to the new line
    i++;
}

"What do you think about it?" Noname asked.
"This opens such a big field of opportunities!" I answered.
Noname replied, "Right, Teo, totally agree! One more useful feature is that you can use the outer loop variable in the inner loop. This means that the inner loop can "know" which iteration is currently in the outer loop. Here is a small demonstration:

for (int i = 0; i < 3; i++) // This loop executes the inner loop 3 times
{
    // Inner loop draws the row of several stars (first 1 star, then 2 stars, etc.)  
    
    for (int j = 0; j <= i; j++) // Note, j is compared to i
    {
      Console.Write("*");
    }
    Console.WriteLine(); // Here we go to the new line
}
// Outputs:
// *
// **
// ***

"Noname, I think it's enough of theory for today," I said.
"Are you tired? Don't worry, the human brain absorbs information much slower than machine memory. The understanding will come. Maybe after some tasks!"

Write a program that reads an integer count from the console. Then it should output a triangle composed of '#' symbols starting from 1 in the first row and ending with count in the last row. Use the for loop. For example:
>4
#
##
###
####

Write a program that reads an integer count from the console. Then it should output a triangle composed of '#' symbols starting from 1 in the first row and ending with count in the last row. This time, use the while loop. For example:
>4
#
##
###
####

"I believe you are ready to fix my antivirus system!" Noname said once I had completed his tasks.

Antivirus protection

Extra complicated Extra complicated Extra complicated
You need to write a program that sends files to the antivirus scan. It should scan files only when Ritchie is NOT watching Noname's state. The program should understand 4 commands: "scan", "hide", "unhide", and "game over". It should have two modes that can be toggled by using the commands "hide" and "unhide" commands. The default mode is "unhide", which means that Ritchie is not watching. If the input is "scan" during the mode "unhide", the program should output "scanning file {number}" where number is an integer that starts from 1 and increments by 1 for every new file. If the user inputs "scan" during the "hide" mode, the program should output "can't scan files for viruses". As soon as Ritchie leaves, the input will be switched to "unhide" and then it should be able to scan again. Your program should listen to the input commands indefinitely until the input is "game over". In this case, the program should output "run" and exit. For example:
>scan
scanning file 1
>scan
scanning file 2
>hide
>scan
can't scan files for viruses
>scan
can't scan files for viruses
>unhide
>scan
scanning file 3
>game over
run

C# Beginner > 1 Repairing Noname > Introduction to while loop

This site uses cookies. By continuing to browse this site you are agreeing to our use of cookies.

Got it!