سؤال
وأنا أحاول كتابة برنامج الذي يقرأ النص من ملف خارجي (دولي سلسلة سلسلة، في كل سطر). يتم تعريف البنية خارج الوظيفة الرئيسية:
typedef struct Person {
char fname[15];
char lname[20];
unsigned long int birth;
} clovek;
وأنا لست بحاجة إلى "clovek" لتكون مجموعة كما هو الحال مع يمكن الكتابة كل البيانات الخط. خط أحمر لالعازلة مع:
fgets(buffer, 50, datafile);
وبعد ذلك أريد أن تحليل ذلك إلى البنية ولكن هذا هو المكان الذي تنشأ مشكلتي:
int i = 0;
while (buffer[i] != ' ') {
clovek.fname[i] = buffer[i];
i++;
}
وهذا يعطيني من الخطأ على: '' من المتوقع معرف أو '(' قبل رمز
وأردت أيضا أن استخدام هذا الرمز لتصحيح الأخطاء ولكنه يعطي مهلة خطأ آخر أيضا:
printf("fname, %s\n", clovek.fname);
والخطأ: يتوقع التعبير قبل "clovek '
وتخميني هو أنني TOTALY يساء فهمها باستخدام من البنية.
المحلول
وclovek
هو اسم مستعار لstruct Person
. إما إزالة الكلمة typedef
، أو إنشاء كائن من نوع struct Person
في مكان ما في التعليمات البرمجية. مع هذه المدونة يمكنك القيام به:
clovek someone;
while (buffer[ i ] ) != ' ') {
someone.fname[ i ] = buffer[ i ];
/* .. */
نصائح أخرى
وبيانكم يحدد clovek كاسم مستعار لشخص هيكل.
وإزالة "typedef و" من الإعلان. وبهذه الطريقة، يصبح clovek متغير من نوع الشخص:
وأو حتى أفضل، إعلان البنية منفصلة عن تعريف متغير:
struct Person {
char fname[15];
char lname[20];
unsigned long int birth;
};
struct Person clovek;