Re: Need help understanding program control/flow.
- From: "Vladimir Oka" <novine@xxxxxxxxxxxxxxx>
- Date: 10 May 2006 02:18:07 -0700
Buck Rogers wrote:
Hi all! Newbie here.
Below is an example from Teach Yourself C in 21 Days. My apologies
if it is a bit long.
What I don't understand is how the "get_data" function can call the
"continue_function", and if NO is returned to "get_data", display_report
executes and the program ends? Basically I am having trouble understanding
the program flow within the "if" loop in the "main" function.
The "if" loops only initiates if cont=YES, so what happens if a function
in the loop(in this case get_data) gets cont=NO? Does this really mean
that if "something" within an "if" loop doesn't meet the condition of the
loop,
the result is that the next statement below the "something" gets executed
and the the "if" loop is exited?
Hope I made myself clear.
What seems clear is that you need to go back and carefully study a good
C textbook, and I mean it in the nicest possible way.
There is no such thing as "if loop". The way `if` *statement* works is
this:
if (condition) {
/* "then" block */
} else {
/* "else" block */
}
/* "next" statement */
If `condition` (which is an expression) is non-zero, statements in the
"then" block get executed. Otherwise, statements in the "else" block
get executed. Once one of them is executed, the execution continues
with the "next" statement.
The "else" block is optional. If omitted, and the `condition` is zero,
the execution continues with the "next" statement.
In both "then" and "else" blocks curly braces are requied only if the
blocks contain more than one statement. So, you can have:
if (condition)
printf("true\n");
else
printf("false\n");
Note how the "then" statement still has to have a terminating ';'.
I'm sure your textbook (but apparently not the "...in 21 days" one) can
describe this much better, and in greater detail. I'm also sure someone
will shortly come along and correct any mistakes I made, but I think I
put across the most important things you seem to have misunderstood.
I recommend you get yourself K&R2, and read it.
Thanks in advance!
===============================================================================
#include <stdio.h>
#define MAX 100
#define YES 1
#define NO 0
/*--------------------*/
/* variables */
/*--------------------*/
long income[MAX]; /* to hold incomes */
int month[MAX], day[MAX], year[MAX]; /* to hold birthdays */
int x, y, ctr; /* For counters */
int cont; /* For program control */
long month_total, grand_total; /* For totals */
/*--------------------*/
/* function prototypes*/
/*--------------------*/
int main(void);
int display_instructions(void);
void get_data(void);
void display_report(void);
int continue_function(void);
/*--------------------*/
/* start of program */
/*--------------------*/
int main(void)
{
cont = display_instructions();
if ( cont == YES ) /* <================================ LOOK HERE!
*/
{
get_data();
display_report();
}
else
printf( "\nProgram Aborted by User!\n\n");
return 0;
}
/*-----------------------------------------------------------*
* Function: display_instructions() *
* Purpose: This function displays information on how to *
* use this program and asks the user to enter 0 *
* to quit, or 1 to continue. *
* Returns: NO - if user enters 0 *
* YES - if user enters any number other than 0 *
*-----------------------------------------------------------*/
int display_instructions( void )
{
printf("\n\n");
printf("\nThis program enables you to enter up to 99 people\'s ");
printf("\nincomes and birthdays. It then prints the incomes by");
printf("\nmonth along with the overall income and overall average.");
printf("\n");
cont = continue_function();
return( cont );
}
/*-------------------------------------------------------------*
* Function: get_data() *
* Purpose: This function gets the data from the user. It *
* continues to get data until either 100 people are *
* entered, or until the user enters 0 for the month.*
* Returns: nothing *
* Notes: This allows 0/0/0 to be entered for birthdays in *
* case the user is unsure. It also allows for 31 *
* days in each month. *
*-------------------------------------------------------------*/
void get_data(void)
{
for ( cont = YES, ctr = 0; ctr < MAX && cont == YES; ctr++ )
{
printf("\nEnter information for Person %d.", ctr+1 );
printf("\n\tEnter Birthday:");
do
{
printf("\n\tMonth (0 - 12): ");
scanf("%d", &month[ctr]);
}while (month[ctr] < 0 || month[ctr] > 12 );
do
{
printf("\n\tDay (0 - 31): ");
scanf("%d", &day[ctr]);
}while ( day[ctr] < 0 || day[ctr] > 31 );
do
{
printf("\n\tYear (0 - 2002): ");
scanf("%d", &year[ctr]);
}while ( year[ctr] < 0 || year[ctr] > 2002 );
printf("\nEnter Yearly Income (whole dollars): ");
scanf("%ld", &income[ctr]);
cont = continue_function(); /*
<===================================== LOOK HERE! */
}
/* ctr equals the number of people that were entered. */
}
/*----------------------------------------------------------*
* Function: display_report() *
* Purpose: This function displays a report to the screen *
* Returns: nothing *
* Notes: More information could be printed. *
*----------------------------------------------------------*/
void display_report()
{
grand_total = 0;
printf("\n\n\n"); /* skip a few lines */
printf("\n SALARY SUMMARY");
printf("\n ==============");
for( x = 0; x <= 12; x++ ) /* for each month, including 0*/
{
month_total = 0;
for( y = 0; y < ctr; y++ )
{
if( month[y] == x )
month_total += income[y];
}
printf("\nTotal for month %d is %ld", x, month_total);
grand_total += month_total;
}
printf("\n\nReport totals:");
printf("\nTotal Income is %ld", grand_total);
printf("\nAverage Income is %ld", grand_total/ctr );
printf("\n\n* * * End of Report * * *\n");
}
/*----------------------------------------------------------------*
* Function: continue_function() *
* Purpose: This function asks the user if they wish to continue.*
* Returns: YES - if user wishes to continue *
* NO - if user wishes to quit *
*----------------------------------------------------------------*/
int continue_function( void )
{
printf("\n\nDo you wish to continue? (0=NO/1=YES): ");
scanf( "%d", &x );
while( x < 0 || x > 1 )
{
printf("\n%d is invalid!", x);
printf("\nPlease enter 0 to Quit or 1 to Continue: ");
scanf("%d", &x);
}
if(x == 0)
return(NO);
else
return(YES);
}
==================================================================================
.
- Follow-Ups:
- Re: Need help understanding program control/flow.
- From: Richard Heathfield
- Re: Need help understanding program control/flow.
- References:
- Need help understanding program control/flow.
- From: Buck Rogers
- Need help understanding program control/flow.
- Prev by Date: Re: Need help understanding program control/flow.
- Next by Date: Re: Need help understanding program control/flow.
- Previous by thread: Re: Need help understanding program control/flow.
- Next by thread: Re: Need help understanding program control/flow.
- Index(es):
Relevant Pages
|