الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما هو الخطأ في هذا الكود

مغلق
بدأه COE 2002 في 10 مارس 2006 · 9 رد · 721 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحية طيبه وبعد

يا جماعة يا ليت تشوفون لي حل ماني داري وش الخطأ في الكود هذا

#include <stdio.h>

 struct student{
	char *name;
	char *id;
        float gpa;
};

int main (void){
         // define variable
  char *a,*b;
         float x;
  struct student st[5];
  int i,index;
  float max,min,avg;
  FILE *inputFile;


         // open file
  inputFile= fopen ("student.txt","r");

         i=0;

         //read file and store in structure
         while (i<5) {
  fscanf(inputFile,"%s  %s  %f\n",&*a,&*b,&x);

  st.name=a;
  st.id=b;
         st.gpa=x;

  printf("\n%s  %s  %f",st.name,st.id,st.gpa);

          i++;
  }
الى هنا الكود شغال زي الحلاوة
     //  i=0;
      //  while (i<5){
      //   printf("\n%s  %s  %f",st.name,st.id,st.gpa);
      //    i++;

      //   }
#2

أتوقع ناقص قوس انهاء ال main

}

ويصير الكود تمام التمام..

#3

لا و الله يا خوي

بالنسبة للقوس حق main مو هذه المشكله لان هذا جزء من البرنامج مو كله

الكود تمام بس لما اضيف الجزء الاخير الي هو طباعة structure تصير مشاكل في execution ما ادري ليه

شكراً

#4
char *a,*b;

انت حاجز مؤشرات لمتغيرات من النوع char لكن لم تشير الى المتغيرات

fscanf(inputFile,"%s  %s  %f\n",&*a,&*b,&x);

استخدمت المؤشرات التي لا تشير الى متغيرات صحيحة

الحل , ضيف بعد قوس الـ while وقبل عملية القرائة من الملف

a = new char[MAXNAMESIZE];
// MAXNAMESIZE اكبر قيمة متوقعة لطول الآسم
b = new char[MAXIDSIZE];
// MAXIDSIZE أكبر قيمة متوقعه لطول الرقم التسلسلي

يعني الشكل يبقى كده :

while (i<5) {
a = new char[MAXNAMESIZE];
b = new char[MAXIDSIZE];
 fscanf(inputFile,"%s  %s  %f\n", a, b, &x);
...

تم تعديل هذه المشاركة بواسطة Asm4all في 10 مارس 2006 في 15:00

#5

بصراحة يا اخ Asm4all

الكود اللي عطيتني اياه الظاهر انه حق ++C مو حق C

لاني لما كتبت new صار في خطأ undefined symbol new

يا ليت حل يا شباب

#6
while (i<5) {
a = (char*) malloc(MAXNAMESIZE);
b = (char*) malloc(MAXIDSIZE);
fscanf(inputFile,"%s  %s  %f\n", a, b, &x);

الكود ده سي

#7

الف شكر اخوي Asm4all

الآن كل شيء تمام بس باقي سؤال صغير

while loop هذه محدده بحيث تقرا خمس اسطر من الملف

لو اردتها ان تقرا كل ما في الملف حتى النهايه ما هو العمل .

#8

استعمل الدالة int feof( FILE *stream )

while(!feof(inputFile))
{
...
}
function Factorial(N: LongWord):LongWord; assembler;
asm
	CMP	 EAX, 1
	JLE	 @END
	MOV	 ECX, EAX
	DEC	 ECX
@CONTINUE:
	MUL	 ECX   
	LOOP	 @CONTINUE
	RET	
@END:
	XOR	 EAX, EAX 
	INC	 EAX
end;
#9

الف شكر شباب على المساعدات هذه

بس في مشكله صغيره ثانيه. لو لاحظتوا ان الكود حقي يحتوي على array student محدد لخمسة

لو بغيته يكون dynamic بحيث يعتمد على عدد الاسطر في الملف ما هو الحل؟ !

حل يا اهل العلم

#10

استبدل

struct student st[5];

بــ

struct student * st;
....
// احصل على عدد السطور في الملف
st = (student *) malloc(NumOfLinesInFile * sizeof(student));

تم تعديل هذه المشاركة بواسطة Asm4all في 11 مارس 2006 في 18:05

هذا الموضوع مغلق.

مواضيع مشابهة