Initialisation des structures après la déclaration [duplicate]
J'ai une structure nommée pointqui stocke les variables xet y.
typedef struct point{
int x, y;
}point;
À l'intérieur d'une fonction, je définis un ensemble de structures avec un type pointà utiliser plus tard dans le programme.
point p1,p2,p3,p4;
J'essaye ensuite plus tard d'initialiser les variables dans une instruction if qui vérifie une condition. J'obtiens toujours différentes erreurs en essayant d'initialiser les variables. Quelle est la bonne façon d'accomplir ce que j'essaie de faire?
if(check1 != 0){
p1 = { x, y };
}else if(check2 != 0){
p2 = { x, y };
}else if(check3 != 0){
p3 = { x, y };
}else if(check4 != 0){
p4 = { x, y };
}
Edit: Les nombres comme noms de variables étaient pour des exemples, et c'est autre chose dans le contexte du reste du programme. Désolé pour la confusion!
Réponses
Les identificateurs (en tant que noms de variables) ne peuvent pas commencer par un nombre. La plupart du temps, vous utilisez une lettre. Comme suggestion, déclarez les variables comme ça:
point point1, point2, point3, point4;
Tout d'abord, l' initialisation consiste à donner une valeur à une variable lors de la déclaration. Vous ne pouvez le faire qu'une seule fois. Lui donner une valeur plus tard est appelé affectation .
La bonne façon d'écrire votre code serait d'utiliser des tableaux et une boucle, pour un simple algorithme de recherche linéaire. Exemple:
bool check [N] = /* something */ ;
point point_arr [N];
for(int i=0; i<N; i++)
{
if(check[i] != 0)
{
point_arr[i].x = x;
point_arr[i].y = y;
break; // break the loop and stop searching here
}
}
Une autre syntaxe consiste à utiliser ce que l'on appelle des littéraux composés et à écrire
point_arr[i] = (point) {x, y};, ce qui équivaut au code ci-dessus.
En utilisant des littéraux composés, vous pouvez le faire:
p1 = (struct point){ x, y };