Project help in C programming

Hi I'm a new student in a C programming class and I need help with my code because I have very large if and else loops but have a hard time trying to condense it below 2000 lines of code without using structs any suggestions?
Use structs.
here is my loop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 if(strcmp(resistorColorOne, "Brown") == 0) {                      
      resistorValue = 10;                                             
                                                                     
      if(strcmp(resistorColorTwo, "Black") == 0) {                   
         resistorValue = resistorValue + 0;                         
                                                                     
         if(strcmp(resistorColorThree, "Black") == 0) {              
            resistorValue = resistorValue * 1;                     
         }                                                           
         
         else if(strcmp(resistorColorThree, "Brown") == 0) {
            resistorValue = resistorValue * 10;
            }
         else if(strcmp(resistorColorThree, "Red") == 0) {
            resistorValue = resistorValue * 100;
         }
         else if(strcmp(resistorColorThree, "Orange") == 0) {
            resistorValue = resistorValue * 1000;
         }
         else if(strcmp(resistorColorThree, "Yellow") == 0) {
            resistorValue = resistorValue * 10000;
         }
         else if(strcmp(resistorColorThree, "Green") == 0) {
            resistorValue = resistorValue * 100000;
         }
         else if(strcmp(resistorColorThree, "Blue") == 0) {
            resistorValue = resistorValue * 1000000;
         }
         else if(strcmp(resistorColorThree, "Violet") == 0) {
            resistorValue = resistorValue * 10000000;
         }
         else {
            printf("Unkown Color please enter in correct format: Brown Brown Brown");
         }
      }
      
      else if(strcmp(resistorColorTwo, "Brown") == 0) {             
         resistorValue = resistorValue + 1;                         
         
         if(strcmp(resistorColorThree, "Black") == 0) {
            resistorValue = resistorValue * 1;
         }         
         else if(strcmp(resistorColorThree, "Brown") == 0) {
            resistorValue = resistorValue * 10;
            }
         else if(strcmp(resistorColorThree, "Red") == 0) {
            resistorValue = resistorValue * 100;
         }
         else if(strcmp(resistorColorThree, "Orange") == 0) {
            resistorValue = resistorValue * 1000;
         }
         else if(strcmp(resistorColorThree, "Yellow") == 0) {
            resistorValue = resistorValue * 10000;
         }
         else if(strcmp(resistorColorThree, "Green") == 0) {
            resistorValue = resistorValue * 100000;
         }
         else if(strcmp(resistorColorThree, "Blue") == 0) {
            resistorValue = resistorValue * 1000000;
         }
         else if(strcmp(resistorColorThree, "Violet") == 0) {
            resistorValue = resistorValue * 10000000;
         }
      }
      
    
Last edited on
I can't use structs yet because in my class we haven't gotten to them so I don't know how else to shorten this
Something along these lines, perhaps:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
static const char* const colours[] = { "black", "brown", "red", "orange", "yellow",
                                       "green", "blue", "violet", "gray", "white" } ;
static const int num_colours = sizeof(colours) / sizeof( colours[0] ) ;

int get_band_value( const char* clr_cstr )
{

    for( int i = 0 ; i < num_colours ; ++i )
        if( strcmp( clr_cstr, colours[i] ) == 0 ) return i ;

    return -1 ; // invalid colour
}

int get_band_multiplier( const char* clr_cstr )
{
    double multiplier = 1.0 ;
    for( int i = 0 ; i < num_colours ; ++i )
    {
        if( strcmp( clr_cstr, colours[i] ) == 0 ) return multiplier ;
        else multiplier *= 10 ;
    }

    if( strcmp( clr_cstr, "gold" ) == 0 ) return 0.1 ;
    if( strcmp( clr_cstr, "silver" ) == 0 ) return 0.01 ;

    return 0.0 ; // invalid colour
}


And then:
1
2
3
4
5
6
7
8
const int value = get_band_value(resistorColorTwo) ;
if( value != -1 ) // valid colour
{
    const double multiplier = get_band_multiplier(resistorColorThree) ;
    if( multiplier != 0.0 ) { resistorValue += value ;  resistorValue *= multiplier ; }
    else { /* invalid resistorColorThree */ } 
}
else { /* invalid resistorColorTwo */ }
Last edited on
Thank you so much!!! This really helps a lot!
Topic archived. No new replies allowed.