0

im doing a project regarding the use of structs and pointers to manage some stuff in a car wash, and i have to count up the time it takes for the given queue to finish washing, so to speak, where "almindelig"(Regular) and luksus (luxurious), each taking respectively 10 and 20 mins. This is my program currently, and where i made my "counting" function, the output i get is an undefined integer.

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

//Jeg laver to structs her, en for bil, der indeholder nummerplade, maerke og type af bil
struct bil
{
    char *Nummerplade;
    char *Maerke;
    char *Type;
};

//Det andet er for koen, hvorved der bliver lavet et array med pointere *bi[100] hvorved dataen der bliver indtastet bliver opbevaret i
struct koe
{
    struct bil *bi[100];
    int antal;
};
//Her bruger jeg en funktion fra programmet Koe3.c fra forelæsning, som jeg har
// omskrevet således at det fungerer til mit program, hvor jeg bruger struct bil
void ind(struct koe *k,char *N,char *M, char *T)
{
    int antalelementer=k->antal;
    struct bil *b;
    b=malloc(sizeof(struct bil));
    b->Nummerplade=N;
    b->Maerke=M;
    b->Type=T;
    k->bi[antalelementer]=b;
    k->antal++;
}
//Her er det en simpel printf funktion, der tager udgangspunkt i struct bil b, hvorved der vil være data der er indlæst i
void udskrivpunkt(struct bil b)
{
    printf("(%s, %s, %s)\n",b.Nummerplade,b.Maerke, b.Type);
}
//Jeg bruger en omskrevet version af Koe3.c fra forelæsning, hvor jeg har omskrevet den til at kunne bruge struct bil i stedet
void udskrivkoe(struct koe k)
{
    int i;
    for(i=0;i<k.antal;i++)
        udskrivpunkt(*(k.bi[i]));
    printf("\n");
}
//Jeg bruger en omskrevet version af koe3.c fra forelæsningen.
struct bil ud(struct koe *k)
{
   k->antal--;
   struct bil element=*(k->bi[0]);
   int i;
   free(k->bi[0]);
   for (i=0;i<k->antal;i++)
     k->bi[i]=k->bi[i+1];
   return element;
}
//Her laver jeg et simpelt for loop, der bruger struct koe k til at gennemløbe arrayet, hvorved der er indlæst data om bilerne, og den returnerer k
//som er antallet af elementer i arrayet, jeg kan derfor kalde på den senere i programmet,
//for at finde ud af hvor mange elementer der er indlæst med struct koe k i arrayet.
int totalkoe(struct koe k)
{
    int i;
    for(i=0;i<k.antal;i++)
    return(k.antal);
}

int totaltid(struct koe k)
{
    struct bil b;
    int i,counter1, counter2, sum;
    for(i=0;i<k.antal;i++)
        if(b.Type="Almindelig")
            counter1++;
        else    
            counter2++;

    sum=10*counter1+20*counter2;
    return(sum);
}


//I min main funktion kalder jeg blot på de funktioner og structs jeg har defineret tidligere i programmet
int main(void) {

    int n, i;
    struct bil b;
    struct koe k;
    k.antal=0;
    
    //Jeg kalder på min ind funktion, hvorved jeg kan indlæse noget data jeg indtaster i programmet, og som der bliver gemt i arrayet bi[100]
    printf("\nOpgave 1: Registrerer biler der ankommer i koeen\n\n");
    printf("Alle biler i koeen:\n");
    ind(&k,"AV96888","VW","Almindelig");
    ind(&k,"KD65656","Audi", "Luksus");
    ind(&k, "AX21878", "Ford", "Almindelig");
    ind(&k, "CN32323", "VW", "Almindelig");
    ind(&k, "NB21214", "Ford", "Luksus");
    ind(&k, "UM21878", "Ford", "Almindelig");
    ind(&k, "AV54361", "Tesla", "Almindelig");
    udskrivkoe(k);

    printf("\nOpgave 2: Udtage den første bil i koeen\n\n");
    printf("Den foerste bil bliver nu vasket og fjernes fra koeen:\n");
    b=ud(&k);
    udskrivkoe(k);
    printf("\nOpgave 3: Få information om hvor mange biler der er i koeen\n");
    printf("\nDer er %d biler i koe\n\n",totalkoe(k));
    printf("%d",totaltid(k));




    return 0;
}

Where the part of the code im having a hard time troubleshooting is this part:

int totaltid(struct koe k)
{
    struct bil b;
    int i,counter1, counter2, sum;
    for(i=0;i<k.antal;i++)
        if(b.Type="Almindelig")
            counter1++;
        else    
            counter2++;

    sum=10*counter1+20*counter2;
    return(sum);
}

Where the output comes out as undefined integer.

Im sorry for the long block of text, but i thought you needed the whole program to better understand / help. Any input is appreciated.

  • 1
    Please disregard all the things commented out, its for me to better remember what each function does – KasperSloth Apr 24 '21 at 17:58
  • `if(b.Type="Almindelig")` that's an assignment (one `=`) and will always evaluate as a true condition. Always compile with warnings enabled, read, try to understand and fix those. –  Apr 24 '21 at 21:55
  • 1
    Note that `==` is not the correct way to compare strings either (`strcmp` is). Have you considered a more systematic introduction to C, e.g. [reading a book](https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)? –  Apr 24 '21 at 21:58
  • I'm aware that I didn't mention the real reason why you are getting random numbers, just enable warnings and let the compiler tell you (something something uninitialized). –  Apr 24 '21 at 22:07
  • Yes i have tried reading a book, im in introduction to c programming atm, hence why there are things i am unsure of – KasperSloth Apr 25 '21 at 09:03

1 Answers1

1

As noted by @dratenik you have to use strcmp in the function. Check the code:

int totaltid(struct koe k)                                                                                 
{                                                                                                          
    struct bil b;                                                                                          
    int i,counter1, counter2, sum;                                                                         
    for(i=0;i<k.antal;i++) {                                                                               
        char *Type = k.bi[i]->Type;                                                                        
        if(!strcmp(Type,"Almindelig"))                                                                     
            counter1++;                                                                                    
        else                                                                                               
            counter2++;                                                                                    
    }                                                                                                      
                                                                                                           
    sum=10*counter1+20*counter2;                                                                           
    return(sum);                                                                                           
}                                                                                                          
          
alepapadop
  • 36
  • 4
  • This returns undefined as well.. I tried returning counter1 and counter 2, but in counter 1 i think its returning the adress of counter1, as it returns 32767, and counter2 returns an undefined number – KasperSloth Apr 25 '21 at 09:44
  • You are right, there was a core. I have fixed the code but i am not sure for the purpose of the code, i can not understand. Hope my new answer is better. – alepapadop Apr 25 '21 at 11:04