2016-05-09 1 views
-1

J'ai un petit problème avec la syntaxe C. Je veux construire un tableau struct. Mais il retourneC Déclaration de structure

spécificateurs de déclaration prévu ou « ... » avant « » villes

Voici mon 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; 
} 

Comment puis-je résoudre ce problème?

+0

'printCityData vides (villes [], int i) {' -> 'vide printCityData (int i) {' ' – BLUEPIXY

+0

#define Struct_Size sizeof (struct City)' est au moins une macro mal nommée, car elle ne fait même pas référence à 'struct'. Dit que, mieux supprimer cette macro complètement. Ne soyez pas trop chic avec les macros, surtout en tant que débutant. (et que l'on peut être remplacé par une fonction inline de toute façon) – Olaf

Répondre

3

Je crois, le problème est dû au type de données manquantes avant cities[] dans

void printCityData(cities[], int i) 

qui devrait être

void printCityData(struct City cities[], int i) 

Rappelez-vous, cities est une variable, pas un type de données. FWIW, en cas de déclaration forward, vous pouvez réellement omettre le nom de la variable mais pas le type de la variable.

Cela dit, en réalité, cities étant une variable globale ici, vous n'avez pas besoin de passer cela en paramètre. Vous pouvez réduire la signature de fonction

void printCityData(int i) { 

et l'appeler comme

printCityData(i); 
+0

'printCityData (villes [i], i);' -> 'printCityData (villes, i);' – BLUEPIXY

+0

@BLUEPIXY Droit, soit de vos commentaires _must_ être honoré. :) –

+0

@Berkin Donc j'espère maintenant que ça marche! :) –

0

Le problème est que vous ne l'avez pas mentionné le type de villes de données et vous appeliez la fonction avec un autre type de données ce que je suppose que tu voulais. J'ai fait les changements nécessaires:

#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(struct City cities[], int i); //cities is an array of struct City 
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); 
    } 
    } 

} 

void printCityData(struct City 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; 
} 
+0

Dupliquer l'ensemble du programme n'est pas utile - il suffit de montrer la ligne corrigée (s) et peut-être un ou deux de plus pour le contexte. – Caleb