kopew
kopew

Reputation: 63

struct and variable looping C language

#include <stdio.h>

struct Car {
  char brand[50];
  char model[50];
  int year;
};

int main() {
  struct Car car1 = {"BMW", "X5", 1999};
  struct Car car2 = {"Ford", "Mustang", 1969};
  struct Car car3 = {"Toyota", "Corolla", 2011};

  printf("%s %s %d\n", car1.brand, car1.model, car1.year);
  printf("%s %s %d\n", car2.brand, car2.model, car2.year);
  printf("%s %s %d\n", car3.brand, car3.model, car3.year);

  return 0;
}

/*
BMW X5 1999
Ford Mustang 1969
Toyota Corolla 2011
*/

Here the struct only has 3 variables (car1, car2, car3). But if it had numerous cars, how could I make this same code (print all values) using a loop?

Upvotes: 0

Views: 74

Answers (2)

Zoso
Zoso

Reputation: 3465

You need an array of Cars, something like this

#include <stdio.h>

struct Car {
  char brand[50];
  char model[50];
  int year;
};

int main() {
    struct Car cars[] = {
        {"BMW", "X5", 1999},
        {"Ford", "Mustang", 1969},
        {"Toyota", "Corolla", 2011},
        {"Mercedes", "C197", 2010 }
    };

    for(size_t i = 0; i < sizeof(cars)/sizeof(cars[0]); ++i) {

        printf("%s %s %d\n", cars[i].brand, cars[i].model, cars[i].year);
    }

    return 0;
}

Upvotes: 2

alex01011
alex01011

Reputation: 1702

You need an array of struct Car.

It works pretty much the same as any other array in with the difference that each element now has extra fields, the ones on your struct.

Here is an example:

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

#define SIZE 100

struct Car {
  char brand[50];
  char model[50];
  int year;
};


int main(void) {
    struct Car cars[SIZE];

    for (int i = 0; i < SIZE; i++) {
        // Initialize
        strcpy(cars[i].brand, "BMW"); // or any other brand
        strcpy(cars[i].model, "X5");

        cars[i].year = 1999;
    }

    for (int i = 0; i < SIZE; i++) {
        // Print
        printf("Car %d:\n", i + 1);
        printf("%s %s %d\n", cars[i].brand, cars[i].model, cars[i].year);
    }

    return 0;
}

Upvotes: 0

Related Questions