I have a little problem with C Syntax. I want to build a struct array. But it returns
expected declaration specifiers or ‘...’ before ‘cities’
Here is my code
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
struct City {
int plateNumber;
char name[32];
double area;
int population;
int populationDensity;
int cityCenterPopulation;
char region[32];
double latitude;
double longitude;
};
struct City cities[81];
#define Struct_Size sizeof(struct City)
void printCityData(cities[], int i);
void readFile();
void readFile(){
int fd = open("data.dat", O_RDONLY);
if(fd<0) {
printf("Error while opening file!");
return;
}
int i;
for (i = 0; i < 81; i++) {
while(read(fd,&cities[i], Struct_Size)>0) {
printCityData(cities[i],i);
}
}
}
void printCityData(cities[], int i) {
printf("CITIES\n");
printf("plateNumber: %d\n", cities[i].plateNumber);
printf("name: %s\n", cities[i].name);
printf("area: %lf\n", cities[i].area);
printf("population: %d\n", cities[i].population);
printf("populationDensity: %d\n", cities[i].populationDensity);
printf("cityCenterPopulation: %d\n", cities[i].cityCenterPopulation);
printf("region: %s\n", cities[i].region);
printf("latitude: %lf\n", cities[i].latitude);
printf("longitude: %lf\n", cities[i].longitude);
}
int main(int argc, char const *argv[]) {
readFile();
return 0;
}
How can I solve this problem?
I believe, the problem is due to the missing data type before cities[]
in
void printCityData(cities[], int i)
which should be
void printCityData(struct City cities[], int i)
Remember, cities
is a variable, not a datatype. FWIW, in case of forward declaration, you can actually omit the variable name but not the variable type.
That said, actually, cities
being a global variable here, you don't need to pass that around as parameter. You can reduce the function signature as
void printCityData(int i) {
and call it like
printCityData(i);