Expected ‘;’, identifier or ‘(’ before ‘int’

Résolu/Fermé
Arkoy - Modifié le 8 févr. 2022 à 15:30
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 9 févr. 2022 à 14:28
Bonjour à tous, je suis bloqué avec ceci :

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

int main(){
    srand(time(NULL));
    struct Donnees {
        char nomStation;
        double temp[24],precipitation;
}
int i,j;
struct Donnees t[100];
for (i=0;i<=99; i=i+1) {
    sprintf(t[i].nomStation,"station",i);
    for (j=0; i<=23; i=i+1){
        t[i].temp[j]=rand()%(46-(-36))+46;
    }
    t[i].precipitation=rand()%(100-0)+0;
}
}





main.c:13:1: error: expected ‘;’, identifier or ‘(’ before ‘int’
13 | int i,j;
| ^~~
main.c:16:17: warning: passing argument 1 of ‘sprintf’ makes pointer from integer without a cast [-Wint-conversion]
16 | sprintf(t[i].nomStation,"station",i);
| ~~~~^~~~~~~~~~~
| |
| char
In file included from main.c:1:
/usr/include/stdio.h:334:38: note: expected ‘char * restrict’ but argument is of type ‘char’
334 | extern int sprintf (char *__restrict __s,
| ~~~~~~~~~~~~~~~~~^~~
main.c:16:29: warning: too many arguments for format [-Wformat-extra-args]
16 | sprintf(t[i].nomStation,"station",i);
| ^~~~~~~~~

Merci d'avance pour votre aide.



EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.

2 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
8 févr. 2022 à 15:43
Bonjour,

Plusieurs choses ne vont pas :
  • tu devrais déclarer les fonctions et les structures avant de les utiliser.
  • je te recommande en particulier de commencer ton fichier source par les structures, ensuite les fonctions, ensuite le main ;
  • si tu indentes proprement ton code, tu éviteras beaucoup d'erreur (tu devrais également mettre des espaces autour des opérateurs et derrière les
    ,
    et les
    ;
    ) ;
  • généralement et à moins de savoir ce qu'on fait, on déclare rarement une structure à l'intérieur d'une fonction ;
  • tu inclues des headers qui n'ont aucune raison d'être inclus, car aucune des fonctions qu'ils fournissent ne sont actuellement utiliser dans ton code ;
  • lorsque tu déclares une structure, à la fin de sa déclaration, il devrait y avoir un
    ;
    derrière
    }
    (contrairement aux fonctions).
  • je pense que dans ta deuxième boucle for, tu as utilisé
    i
    au lieu de
    j
    ;
  • la fonction
    sprintf
    est mal appelée (voir la documentation en cherchant "man sprintf" dans google ou dans un terminal si tu es sous linux)
  • comme ta fonction
    main
    a pour type de retour
    int
    elle devrait en retourner un (par convention 0 quand le programme se termine bien, une valeur non nulle abitraire correspondant au code d'exécution sinon).
  • nomStation
    est de type
    char
    alors qu'elle est amenée à stocker une chaîne de caractère. Ce devrait donc soit être un tableau de char pré-alloué suffisamment grand pour accueillir la chaîne de caractère, soit un
    char *
    alloué dynamiquement (e.g. avec
    malloc
    ).
  • certains calculs "constants" ne sont pas calculés, c'est un peu bizarre, autant les simplifier.


Une fois corrigé ton programme pourrait ressembler à :

#include <stdio.h>  // printf
#include <stdlib.h> // srand
#include <time.h>   // time

struct Donnees {
    char nomStation[30];
    double temp[24], precipitation;
};

int main(){
    srand(time(NULL));
    int i, j;
    struct Donnees t[100];
    for (i = 0; i < 100; i++) {
        sprintf(t[i].nomStation, "station%d", i);
        for (j = 0; i < 24; i++) {
            t[i].temp[j] = rand() % 82 + 46;
        }
        t[i].precipitation = rand() % 100;
    }
    return 0;
}
1
Bonjour mamiemando.

Merci beaucoup pour toutes les réponses et conseils apportés, et de la correction !
Je les appliquerai pour la suite de mon apprentissage.

Je vous souhaite une très agréable journée !
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
9 févr. 2022 à 14:28
Merci pour ton retour, bonne continuation et bon apprentissage :-)
1