ساختارها (Structures)
«ساختار (Structure)» یا «struct» چند «متغیر (Variable)» مرتبط را کنار هم می گذارد. بنابراین مدیریت داده ها ساده تر می شود. مثل یک پوشه برای کارنامه، کلاس، و نام.
تعریف ساختار با struct
با کلمه ی struct یک الگو می سازیم. هر عضو یک متغیر است.
struct MyStructure {
int myNum;
char myLetter;
};
ساخت متغیر از روی ساختار
بعد از تعریف، یک متغیر از همان نوع می سازیم.
struct myStructure {
int myNum;
char myLetter;
};
int main() {
struct myStructure s1;
return 0;
}
دسترسی به اعضا با نقطه
برای مقداردهی و چاپ از علامت نقطه استفاده کن.
#include <stdio.h>
struct myStructure {
int myNum;
char myLetter;
};
int main() {
struct myStructure s1;
s1.myNum = 13;
s1.myLetter = 'B';
printf("My number: %d\n", s1.myNum);
printf("My letter: %c\n", s1.myLetter);
return 0;
}
چند متغیر از یک ساختار
می توانی چند نمونه بسازی و جداگانه مقدار دهی کنی.
struct myStructure s1;
struct myStructure s2;
s1.myNum = 13;
s1.myLetter = 'B';
s2.myNum = 20;
s2.myLetter = 'C';
رشته ها داخل ساختار: خطا و راه حل
«رشته (String)» در C آرایه کاراکتر است. نسبت دادن مستقیم مجاز نیست.
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
struct myStructure s1;
s1.myString = "Some text";
printf("My string: %s", s1.myString);
return 0;
}
نکته: برای مقداردهی رشته از strcpy استفاده کن.
#include <stdio.h>
#include <string.h>
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
struct myStructure s1;
strcpy(s1.myString, "Some text");
printf("My string: %s", s1.myString);
return 0;
}
مقداردهی هم زمان هنگام اعلان
مقادیر را داخل آکلاد و با ویرگول بده. ترتیب مهم است.
#include <stdio.h>
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
struct myStructure s1 = { 13, 'B', "Some text" };
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);
return 0;
}
کپی کردن ساختار
می توانی کل مقدارها را بین دو نمونه کپی کنی.
struct myStructure s1 = { 13, 'B', "Some text" };
struct myStructure s2;
s2 = s1;
تغییر دادن مقدارها
با نقطه تغییر بده. برای رشته دوباره strcpy بزن.
#include <stdio.h>
#include <string.h>
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
struct myStructure s1 = { 13, 'B', "Some text" };
s1.myNum = 30;
s1.myLetter = 'C';
strcpy(s1.myString, "Something else");
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);
return 0;
}
ویرایش پس از کپی
بعد از کپی، داده های نمونه دوم را تغییر بده و چاپ کن.
#include <stdio.h>
#include <string.h>
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};
int main() {
struct myStructure s1 = { 13, 'B', "Some text" };
struct myStructure s2;
s2 = s1;
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);
return 0;
}
مثال واقعی: اطلاعات خودرو
چند خودرو با برند، مدل، و سال بساز و چاپ کن.
#include <stdio.h>
struct Car {
char brand[30];
char model[30];
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;
}
گام های عملی
- یک الگوی
structتعریف کن. - از روی آن متغیر بساز.
- با نقطه مقدار بده و چاپ کن.
- برای رشته ها از
strcpyاستفاده کن. - در صورت نیاز مقدارها را کپی یا ویرایش کن.
نکته: برای ادامه موضوع، بخش ساختارهای تو در تو را ببین. همچنین قبل تر در خواندن فایل با داده ها کار کردیم.
جمع بندی سریع
- ساختار چند نوع داده را کنار هم می گذارد.
- با نقطه به اعضا دسترسی داریم.
- رشته ها را با
strcpyمقدار بده. - می توانی مقداردهی هم زمان انجام دهی.
- کپی ساختار ساده و مستقیم است.