The following are all the topics available in this module.
Making Decisions with the if Statement
The most common way to make a decision in Visual C++ is to use the if statement. You can use the if statement to perform a one-way test, a two-way test, a multiway test, or a nested test. Let’s consider a simple one-way test first.
|
Performing One-Way Tests
The following illustration shows a simple one-way test.
The following example shows how to define a one-way test in Visual C++:
if (number < 0)
Console::WriteLine(L"The number is negative");
Console::WriteLine(L"The end");
The if keyword is followed by a conditional expression enclosed in parentheses. The parentheses are mandatory. If the conditional expression evaluates to true, the next statement is executed, the message "The number is negative" will be displayed. Notice that the message "The end" will always be executed, regardless of the outcome of the test, because it is outside the if body.
There is no semicolon after the closing parenthesis in the if test. One of the most common programming errors in C++ is to put one in by mistake, as shown here:
// Note the spurious semicolon
if (number < 0);
This statement is equivalent to the following statement, which is probably not what you intended:
if (number < 0)
; // Null if-body – do nothing if number < 0
If you want to include more than one statement in the if body, enclose the if body in braces ({}), as follows:
if (number < 0)
{
Console::Write(L"The number ");
Console::Write(number);
Console::WriteLine(L" is negative");
}
Console::WriteLine(L"The end");
if body in braces, even if it comprises only a single statement. This style is defensive programming, in case you (or another developer) add more statements to the if body in the future.
It’s good practice to enclose theIn this exercise, you will create a new application to perform one-way tests. As this chapter progresses, you will extend the application to use more complex decision-making constructs and to perform loops. For now, the application will ask the user to enter a date, and then it will perform simple validation and display the date in a user-friendly format on the console.
Start Microsoft Visual C++/Studio .NET, and create a new CLR Console Application project. Name the application CalendarAssistant.
In Solution Explorer, double-click CalendarAssistant.cpp to view the code file.
At the top of the file, immediately under the using namespace System; line, add the following function prototypes.
At the end of the file, after the end of the main() function, implement the GetYear function as follows:
int GetYear()
{
Console::Write(L"Year? ");
String ^ input = Console::ReadLine();
int year = Convert::ToInt32(input);
return year;
}
Implement the GetMonth function as shown in the following code. (This is a simplified implementation; later in this module, you will enhance the function to ensure that the user enters a valid month.)
int GetMonth()
{
Console::Write(L"Month? ");
String ^ input = Console::ReadLine();
int month = Convert::ToInt32(input);
return month;
}
Implement the GetDay function as follows. You will enhance this function later to ensure that the user enters a valid day in the given year and month.
int GetDay(int year, int month)
{
Console::Write(L"Day? ");
String ^ input = Console::ReadLine();
int day = Convert::ToInt32(input);
return day;
}
Implement the DisplayDate function as follows to display the date as three numbers. Later in this module you will enhance this function to display the date in a more user-friendly format.
void DisplayDate(int year, int month, int day)
{
Console::WriteLine(L"\nThis is the date you entered:");
Console::Write(year);
Console::Write(L"-");
Console::Write(month);
Console::Write(L"-");
Console::Write(day);
Console::WriteLine();
}
![]() |
Add the following code inside the main() method. This code asks the user to enter a year, month, and day. If the date passes a simplified validation test, the date is displayed on the console. If the date is invalid, it is not displayed at all.
Console::WriteLine(L"Welcome to your calendar assistant");
Console::WriteLine(L"\nPlease enter a date");
int year = GetYear();
int month = GetMonth();
int day = GetDay(year, month);
// Simplified test for now – assume there are 31 days in
// every month
if (month >= 1 && month <= 12 && day >= 1 && day <= 31)
{
DisplayDate(year, month, day);
}
Console::WriteLine(L"\nThe end\n");
This if statement combines several tests by using the logical AND operator &&. Logical tests are performed from left to right. Testing stops as soon as the final outcome is known for sure. For example, if the month is 0, there is no point performing the other tests, the date is definitely invalid. This is known as shortcut evaluation.
Build the program, and fix any compiler errors that you might have.
Run the program. Enter valid numbers for the year, month, and day (for example, 2007, 6, and 7). The program displays the messages shown in the following graphic.
Notice that the program displays the date because it is valid. The message "The end" is also displayed at the end of the program.
Run the program again, but this time, enter an invalid date (for example, 2005, 0, and 31). The program displays the messages shown in the following graphic.
Notice that the program doesn’t display the date because the date is invalid. Instead, the program just displays "The end" at the end of the program. You can make the program more user-friendly by displaying an error message if the date is invalid. To do so, use a two-way test.