# Uh-oh! I am having a major switch problem!

• 10-31-2001
goodn
Uh-oh! I am having a major switch problem!
Hey. i'm making this program right now, and I KNOW what the problem is, but I don;'t know what I did wrong. All the functions and everything work correctly, so no need to worry about those, but I'm pretty sure I screwed up SOMEWHERE in my switching. Everytime I slect a number, ALL possible entries take place. Entries 1-11 and 99. Can anyone see my problem? i've been debugging the crap out of this thing to no avail.

OMG! NEVERMIND! I can't believe I was so stupid I didn't put BREAK in there!

Code:

```int main () { FILE *fp; double array[100]; int selection=0, num=0, count=0, column=0; while (selection != 99) { printf("1- Read from arraynumbers1.txt \n"); printf("2- Read from arraynumbers2.txt \n"); printf("3- Read from arraynumbers3.txt \n"); printf("4- Sort in ascending order \n"); printf("5- Sort in decending order \n"); printf("6- Calculate the sum \n"); printf("7- Calculate the average \n"); printf("8- Calculate the Minimum \n"); printf("9- Calculate the Maximum \n"); printf("10- Display the array in 1 columns \n"); printf("11- Read from arraynumbers3.txt \n"); printf("Enter Selection: \n"); scanf("%i", &selection); switch(selection) { case 1: { fp = fopen("arraynumbers1.txt", "r"); if ( fp == NULL ) { printf("File could not be opened\n\n"); return 1; } num=0; while (fscanf(fp, "%lf", &array[num]) != EOF) num++; printf("%i numbers were read from arraynumbers1.txt. \n", num); } case 2: { num=0; fp = fopen("arraynumbers2.txt", "r"); if ( fp == NULL ) { printf("File could not be opened\n\n"); return 1; } while (fscanf(fp, "%lf", &array[num]) != EOF) num++; printf("%i numbers were read from arraynumbers2.txt. \n"); } case 3: { num=0; fp = fopen("arraynumbers3.txt", "r"); if ( fp == NULL ) { printf("File could not be opened\n\n"); return 1; } while (fscanf(fp,"%lf", &array[num]) !=EOF) num++; printf("%i numbers were read from arraynumbers3.txt. \n"); } case 4: { if (num==0) printf("Please select 1-3 first. \n"); else { dsort(array, num, 0); printf("The New array is:"); for (count = 0; count<num; count++) printf("%.2lf ", array[count]); printf("\n\n"); } case 5: { if (num==0) printf("Please select 1-3 first. \n"); else dsort(array, num, 1); printf("The New array is: \n"); for (count = 0; count<num; count++) printf("%.2lf  ", array[count]); printf("\n\n"); } case 6: { if (num==0) printf("Please select 1-3 first. \n"); else printf("sum=%.2lf", dsum(array,num)); printf("\n\n"); } case 7: { if (num==0) printf("Please select 1-3 first.\n"); else printf("average=%.2lf", daverage(array,num) ); printf("\n\n"); } case 8: { if (num==0) printf("Please select 1-3 first.\n"); else printf("maximum=%.2lf", dmax(array,num) ); printf("\n\n"); } case 9: { if (num==0) printf("Please select 1-3 first.\n"); else printf("minimum=%.2lf", dmin(array,num) ); printf("\n\n"); } case 10: { if (num==0) printf("Please select 1-3 first.\n"); else { for (count = 0; count<num; count++) printf("%.2lf \n ", array[count]); } printf("\n\n"); } case 11: { if (num==0) printf("Please select 1-3 first.\n"); else { for (count = 0, column = 0; count<num; count++, column++) { if(column==2) { printf("\n"); column = 0; } printf("%.2lf    ", array[count]); } } printf("\n\n"); } case 99: printf("Thank You and Come Again.\n"); default: printf("Invalid Entry. Please Try Again.\n"); } return 0; } } }```
• 10-31-2001
goodn
Hehe, I also had a couple errors, but I fixed those. Gues I should really look at my program for 5 minutes before deciding to ask for help!
• 10-31-2001
lightatdawn
switch statements use this syntax (from VC++ help file):

switch ( expression )
{
declarations
.
.
.
case constant-expression :

statements executed if the expression equals the
value of this constant-expression
.
.
.
break; /*You forget this statement*/
default :
statements executed if expression does not equal
any case constant-expression
}

You can use the break statement to end processing of a particular case within the switch statement and to branch to the end of the switch statement. Without break, the program continues to the next case, executing the statements until a break or the end of the statement is reached. In some situations, this continuation may be desirable.

The default statement is executed if no case constant-expression is equal to the value of switch ( expression ). If the default statement is omitted, and no case match is found, none of the statements in the switch body are executed. There can be at most one default statement. The default statement need not come at the end; it can appear anywhere in the body of the switch statement. In fact it is often more efficient if it appears at the beginning of the switch statement. A case or default label can only appear inside a switch statement.

The following examples illustrate switch statements:

Code:

```switch( c ) {     case 'A':         capa++;     case 'a':         lettera++;     default :         total++; }```
All three statements of the switch body in this example are executed if c is equal to 'A' since a break statement does not appear before the following case. Execution control is transferred to the first statement (capa++;) and continues in order through the rest of the body. If c is equal to 'a', lettera and total are incremented. Only total is incremented if c is not equal to 'A' or 'a'.

Code:

```switch( i ) {     case -1:         n++;         break;     case 0 :         z++;         break;     case 1 :         p++;         break; }```
In this example, a break statement follows each statement of the switch body. The break statement forces an exit from the statement body after one statement is executed. If i is equal to ?1, only n is incremented. The break following the statement n++; causes execution control to pass out of the statement body, bypassing the remaining statements. Similarly, if i is equal to 0, only z is incremented; if i is equal to 1, only p is incremented. The final break statement is not strictly necessary, since control passes out of the body at the end of the compound statement, but it is included for consistency.
• 11-01-2001
goodn
Um, thanks, but didn't you read? I just forgot the breaks. I know how switches work, I just simply forgot to put in my breaks. I edited my post to say that I found and corrected the problem. Your long explanation was not necesarry.
• 11-01-2001
quzah
> I edited my post to say that I found and corrected the problem.
> Your long explanation was not necesarry.

You just remember those lines of text, when noone helps you out
in the future and you're whining about it. You don't have to be a
*censored*, just because someone explained the issue more in