سؤال

وأنا أحاول كتابة برنامج الذي يقرأ النص من ملف خارجي (دولي سلسلة سلسلة، في كل سطر). يتم تعريف البنية خارج الوظيفة الرئيسية:

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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top