View Full Version : مبتدی: عدم اجرا برنامه
Faraz Mehraien
چهارشنبه 19 شهریور 1393, 12:43 عصر
با سلام من این کدو زدم و قرار است میاگین یه سری نمره رو با تابع حساب کنه و اگر کاربر -1 وارد کرد دیگه نمره نگیره و میانگین رو حساب کنه.برنامه اروری ندارا اما هنکام اجرا(کامپایل) برنامه کار نمی کنه.
ممنون می شم اگر کمک کنید. اینم کدم
#include <stdio.h>#include <stdlib.h>
float ave(float score[],int count);
int main(int argc, char *argv[])
{
float average;
int a;
float score[a];
int count=0;
int counter=0;
printf("enter scores\n");
printf("for end enter -1\n");
while(score[counter]!=-1)
{
scanf("%f",&score[counter]);
if(score[counter]==-1)
break;
counter++;
}
count=counter;
average=ave(score,count);
printf("======================\n");
printf("average is : ");
printf("%f",average);
printf("\n");
system("PAUSE");
return 0;
}
float ave(float score[],int count)
{
int i;
float av=0;
float sum=0;
for( i=0;i<count;i++)
sum=sum+score[i];
av=sum/count;
return av;
}
مسعود اقدسی فام
چهارشنبه 19 شهریور 1393, 12:51 عصر
خط هفتم برای تعریف score درست نیست. اندازه آرایه باید مشخص باشه.
داخل حلقه 1- رو بررسی کردید و درست نیست خط دوازدهم به اون ترتیب باشه. ممکنه به صورت تصادفی هم که شده باشه عنصر counterم اون لحظه 1-باشه. قبل از اینکه این عنصر رو بگیرید محتوای اون محل آرایه رو بررسی میکنید.
مثلا میشه اینطوری نوشت:
do
{
scanf("%f",&score[counter]);
}while(score[counter++]!=-1);
count=counter-1;
ابوالفضل عباسی
چهارشنبه 19 شهریور 1393, 14:26 عصر
یعنی باید قبل از score بهش مقدار بدهد یا آرایه مشخص؟
مسعود اقدسی فام
چهارشنبه 19 شهریور 1393, 15:08 عصر
یعنی باید قبل از score بهش مقدار بدهد یا آرایه مشخص؟
باید طول مشخص باشه. طول آرایه a گرفته شده. اما مقدار a مشخص نیست.
zero_ox
چهارشنبه 19 شهریور 1393, 17:01 عصر
سلام .از a که استفاده نکردید حذفش کنید و این دوخط رو به اینصورت جابجا کنید int count=0; float score[count];
مسعود اقدسی فام
چهارشنبه 19 شهریور 1393, 19:41 عصر
سلام .از a که استفاده نکردید حذفش کنید و این دوخط رو به اینصورت جابجا کنید int count=0; float score[count];
یعنی طول آرایه صفر باشه؟
Faraz Mehraien
چهارشنبه 19 شهریور 1393, 20:51 عصر
من می خوام اندازه آرایه ام نا مشخص باشه،،، برای ختم گرفتن ورودی هم مثلا عدد -1 وارد شود چون نمره که منفی نمی شود،،باید چی کار کنم؟؟
مسعود اقدسی فام
چهارشنبه 19 شهریور 1393, 21:00 عصر
من می خوام اندازه آرایه ام نا مشخص باشه،،، برای ختم گرفتن ورودی هم مثلا عدد -1 وارد شود چون نمره که منفی نمی شود،،باید چی کار کنم؟؟
در مورد 1- که مشکلی نیست و کد درست کار میکنه. اما در مورد طول آرایه چارهای ندارید جز اینکه ظولش رو مشخص کنید. طول رو هم معمولا حداکثر ممکن دادهها در نظر میگیرن. در مورد این مثال خاص، طبیعتا یه دانشجو یه ترم بیشتر از بیست تا و کل دوران کارشناسیش بیشتر از صد تا نمره نداره! حالا شما حساب کنید هزار تا.
ولی خب اگه در کل بخوایم بحث کنیم، دو روش وجود داره:
۱- اول تعداد نمرات رو بگیرید و بعد آرایه رو بسازید.
۲- از vector یا list جای آرایه استفاده کنید. در مورد این دو تا هم به اندازهی کافی همین تالار بحث شده. جستجو کنید.
zero_ox
چهارشنبه 19 شهریور 1393, 21:18 عصر
سلام شما کدرو اجراکن
مسعود اقدسی فام
چهارشنبه 19 شهریور 1393, 21:58 عصر
سلام شما کدرو اجراکن
اجرا کردم. ولی بعد ورود چند تا عدد بدون اینکه 1- وارد کنم و بدون محاسبهی میانگین خارج شد! حالا اصلا خارج هم نشه و تا بینهایت عدد بشه وارد کرد.
بحث این نیست که برنامه اجرا نمیشد. همون اول هم ایشون گفتن برنامه اجرا میشه. مشکل در تخصیص حافظه هست. مسالهی خروج از حدود آرایه در ++C بررسی نمیشه. شما میتونید یه آرایه با ده عنصر تعریف کنید و سعی کنید عنصر 100م یا 1000م هم مقداردهی کنید. با هیچ خطایی روبرو نمیشید. فقط دارید تلاش تلاش میکنید جایی بنویسید که قبلا برای آرایه اختصاص داده نشده و این اصولا درست نیست.
یه نگاهی به این سوال و بحثایی که شده بندازید:
http://stackoverflow.com/questions/1239938/c-accesses-an-array-out-of-bounds-gives-no-error-why
zero_ox
چهارشنبه 19 شهریور 1393, 22:13 عصر
من این کدو زدم و قرار است میاگین یه سری نمره رو با تابع حساب کنه و
اگر کاربر -1 وارد کرد دیگه نمره نگیره
و میانگین رو حساب کنه
.برنامه اروری ندارا اما هنکام
اجرا(کامپایل)
برنامه کار نمی کنه.
من تو کدبلاک اجرا کردم میانگین رو حساب کرد آرایه رو زیر متغیر قرار بدید int count=0; float score[coun
البته با شما موافقم
این اصولا درست نیست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.