PDA

View Full Version : اجرا نشدن برنامه در TC



masoud.t123
چهارشنبه 13 خرداد 1388, 21:58 عصر
با عرض سلام خدمت اساتید
بنده هنگامی که کد زیر را در توربو سی یا بورلند سی می نویسم وسط کار از برنامه خارج می شود.جالب اینکه در ابتدا برنامه اجرا می شد ولی اکنون برنامه اجرا نمی شود.
لطفا نگویید در یک محیط دیگر بنویس ، چون در دانشگاه برنامه ها باید در tc اجرا شوند.
با تشکر.



#include<stdio.h>
#include<conio.h>
#include<STDLIB.H>
#include<string.h>
main()
{
clrscr();
char ch;
FILE *f;
int i;
f=fopen("c:\\student.bin","wb");
if(f==NULL) exit(0);
typedef struct{
int id;
char *name;
float grade;
} student;
student stu[2];
char *c;
for (i=0;i<=1;i++)
{
printf("Id\n");
scanf("%d",&stu[i].id);
printf("name\n");
scanf("%s",c);
strcpy(stu[i].name,c);
printf("grade\n");
scanf("%f",&stu[i].grade);
fwrite(&stu,sizeof(stu),1,f);
}
int j;
for(j=0;j<=1;j++)
{
fread(&stu,sizeof(stu),1,f);
printf("id = %d\t name= %s\t grade = %f\n",stu[j].id,stu[j].name,stu[j].grade);
}
fclose(f);
getch();
}

!EHSAN!
چهارشنبه 13 خرداد 1388, 22:25 عصر
این واضحه خوب! کامپایلرت قاتی کرده!

shs_night
جمعه 15 خرداد 1388, 03:38 صبح
این واضحه خوب! کامپایلرت قاتی کرده!
با عرض سلام

نه اتفاقا مشکل از کامپایلر نیست.
به تغیراتی که در کدتون دادم نگاه کنید اگر بازم متوجه نشدید بگید تا توضیح بدم

masoud.t123
جمعه 15 خرداد 1388, 11:16 صبح
با عرض سلام

نه اتفاقا مشکل از کامپایلر نیست.
به تغیراتی که در کدتون دادم نگاه کنید اگر بازم متوجه نشدید بگید تا توضیح بدم

با تشکر از شما
دوست عزیز برنامه باز هم موقع گرفتن نام به بعد خارج می شود.
لطفا کمک کنید.بدجوری گیج شدم.

shs_night
دوشنبه 18 خرداد 1388, 03:12 صبح
من از کامپایلر vc استفاده میکنم و هیچ مشکلی ندارم.:متعجب:

MIDOSE
دوشنبه 18 خرداد 1388, 04:22 صبح
scanf("%s",c);
strcpy(stu[i].name,c);

از این خط به بعد گیر می ده درسته؟ اگه بله احتمالن مشکل باید تو کپی رشته باشه اگه بازم جواب نگرفتی بگو تا خودم تست کنم(با توجه به ساعت الان توربو دم دست نیست:لبخند:)

masoud.t123
دوشنبه 18 خرداد 1388, 18:30 عصر
scanf("%s",c);





strcpy(stu[i].name,c);





از این خط به بعد گیر می ده درسته؟ اگه بله احتمالن مشکل باید تو کپی رشته باشه اگه بازم جواب نگرفتی بگو تا خودم تست کنم(با توجه به ساعت الان توربو دم دست نیست:لبخند:)


آقا اگه کمکم کنی خیلی ممنون می شوم.
فکر می کنم از این خط یا خط بعدی باشد.

MIDOSE
سه شنبه 19 خرداد 1388, 00:57 صبح
scanf:floating point formats not linked
Abnormal program termination
دوست عزیز با کلی کلنجار رفتن این دست گیرم شد
حالا باقیش با خودت باید بفهمی مشکلت کجاست :بامزه:(به خاطر قوانین سایت و این که منم دوست ندارم مسئله را مثل هلو برای دانشجو حل کنم:لبخند::بامزه:)
می تونی بگی بلد نبودم ،بهتره:لبخندساده:
موفق باشی دوست عزیز

masoud.t123
سه شنبه 19 خرداد 1388, 21:29 عصر
scanf:floating point formats not linked



Abnormal program termination


دوست عزیز با کلی کلنجار رفتن این دست گیرم شد



حالا باقیش با خودت باید بفهمی مشکلت کجاست :بامزه:(به خاطر قوانین سایت و این که منم دوست ندارم مسئله را مثل هلو برای دانشجو حل کنم:لبخند::بامزه:)


می تونی بگی بلد نبودم ،بهتره:لبخندساده:


موفق باشی دوست عزیز






دوست عزیز با تشکر از شما که برای بنده وقت گذاشتید.راستش فکر نمی کنم آموزش دادن به دانشجو خلاف قوانین سایت باشد.چون بنده از شما درخواست پروژه نکردم..
بنده برای گرفتن grade قبلا از اعشاری %f استفاده می کردم ولی الان از صحیح %d استفاده می کنم.و مشکل حل شد ولی اگه ممکن است شما بگویید چگونه از همان اعشاری استفاده کنم؟

فراموش نکنید زکات علم ، آموختن است!

MIDOSE
چهارشنبه 20 خرداد 1388, 04:32 صبح
خب عزیزم من زکاتش را که دادم همون متنی که برات نوشتم را روش کمی فکر کن اخه همین طوری که مزه نداره؟(راستی کمی بیشتر بهش ور برو) این تمرین خوبی برا تحلیل برنامه هست.(البته منظورم کد است).

موفق باشی

masoud.t123
پنج شنبه 21 خرداد 1388, 11:57 صبح
با سلام خدمت شما
بنده خیلی روی کد کار کردم.متاسفانه متوجه نشدم.در ضمن این خط error که شما گفتی در یکی از اجرا ها در tc نشان داده شد ولی همیشه نشان داده نمی شود.
آقا تو رو خدا کمک کنید... .
پیشاپیش ممنون.

Nima_NF
شنبه 23 خرداد 1388, 18:52 عصر
برنامه ناقص نوشته شده است...

- شما اشاره گر به char ساخته اید اما حافظه تخصیص نداده اید. (باید از malloc در C یا new در ++C استفاده کنید.) یا کلا مستقیم یک آرایه با طول مشخص بسازید.

- وقتی قرار هست از فایلی بخوانید باید آن را ببندید و به شکل rb باز کنید (یا از همان ابتدا به شکل خواندنی-نوشتنی باز کنید)




#include<stdio.h>
#include<conio.h>
#include<STDLIB.H>
#include<string.h>
int main()
{
// clrscr();
char ch;
FILE *f;
int i;
char strm[256]; // <---
f=fopen("c:\\student.bin","wb");

if(f==NULL) exit(0);

typedef struct{
int id;
char *name;
float grade;
} student;

student stu[2];
//char *c;
char c[256]; // <---

for (i=0;i<=1;i++)
{
printf("Id\n");
scanf("%d",&stu[i].id);
printf("name\n");
scanf("%s",c);

//strcpy(stu[i].name,c);
stu[i].name = (char *)malloc(256); // <---
strcpy(stu[i].name,c);

printf("grade\n");
scanf("%f",&stu[i].grade);
fwrite(&stu[i],sizeof(stu),1,f); // <---

printf("%s",stu[i].name );

}
int j;

fclose(f); // <---
f=fopen("c:\\student.bin","rb"); // <---

for(j=0;j<=1;j++)
{
fread(&stu[j],sizeof(stu),1,f); // <---

}
fclose(f);
getch();
return 0;
}

masoud.t123
یک شنبه 24 خرداد 1388, 09:29 صبح
با تشکر از شما
نیما جان باز هم مانند قبل موقع دریافت grade از برنامه خارج می شود و در هنگام اجرای بعدی پیغام
scanf:floating point formats not linked
Abnormal program termination

را می دهد .فکر می کنم مشکل به خاطر عدد اعشاری باشد.
بنده کامل گیج شدم و هر چی کلنجار با برنامه می روم نمی توانم مشکل را حل کنم.
لطفا" کمک کنید.

حامد مصافی
یک شنبه 24 خرداد 1388, 10:50 صبح
یکی از راه های زیر را امتحان کنید.

کامپايلر شما متعلق به بيش از 15 سال پيش است، حافظه کامپيوتر شما چندين مگا بايت است اما اين کامپايلر همه آن را نمی بيند. این مورد خاص به دلیل optimize های TC صورت می گیرد که گمان می کند یک متغیر float را تا زمانی که برنامه شما به آن نیاز نداشته باشد نباید لینک کند.

1- پس از يک کامپايلر و محیط جديدتر مثل dev-c++ یا miniGW استفاده کنيد.

2- dummy variable

float dummy = 1.0f;
scanf("%f",&dummy);
stu[i].grade = dummy;
3- مقادیر درون ساختار را هنگام ایجاد مقدار دهی کنید.



student stu[2] =
{
{0, "", 0.1},
{0, "", 0.1},
};
4-هدایت زیر را به ابتدای فایل اضافه کنید.

extern unsigned _floatconvert;
#pragma extref _floatconvert