PDA

View Full Version : سوال: تابع بازگشتی



batman1
دوشنبه 17 اسفند 1394, 09:44 صبح
سلا به همه.
چون این دستورات دارای تابع بازگشتی است:
public void Ret(string str)
{
FileInfo fi = new FileInfo(str);
StreamWriter sw = fi.AppendText();
for (int i = 1; i <= 10; i++)
{
sw.WriteLine(i);
}
Ret(str);
sw.Close();
}
خط

StreamWriter sw = fi.AppendText();
دوباره اجرا شده و باعث خطا میشه.
چی کار کنم که این خط دوباره اجرا نشه؟
ممنون.

nunegandom
دوشنبه 17 اسفند 1394, 10:31 صبح
سلام دوست عزیز
یه بولین تعریف کن و بعد true بذار برای دفعه اول
بعدش هر بار بولین رو چک کن

rezashaban
دوشنبه 17 اسفند 1394, 10:55 صبح
سلام دوست من
دستور sw.Close(); رو قبل از Ret(str); اجرا کن تا درست بشه

batman1
سه شنبه 18 اسفند 1394, 11:31 صبح
سلام دوست من
دستور sw.Close(); رو قبل از Ret(str); اجرا کن تا درست بشه
نمیشه عزیز.
خطای اور فلو میده.

batman1
سه شنبه 18 اسفند 1394, 11:34 صبح
سلام دوست عزیز
یه بولین تعریف کن و بعد true بذار برای دفعه اول
بعدش هر بار بولین رو چک کن
دقیقا از همون خطی که گفتم خطا میگیره:
139500

nunegandom
سه شنبه 18 اسفند 1394, 11:37 صبح
سلام این خطای اون چیزی که میگم نیست که این میگه یه برنامه ای با اون فایل داره کار میکنه برا همین نمیتونه این یکی برنامه هم باهاش کار کنه همزمان
وگرنه اون چیزی که گفتم رو یادمه خودم مشکلمو باهاش حل کردم

batman1
چهارشنبه 19 اسفند 1394, 03:22 صبح
سلام این خطای اون چیزی که میگم نیست که این میگه یه برنامه ای با اون فایل داره کار میکنه برا همین نمیتونه این یکی برنامه هم باهاش کار کنه همزمان
وگرنه اون چیزی که گفتم رو یادمه خودم مشکلمو باهاش حل کردم
میشه شما یه لطفی کنید و اون متغیری رو که گفتید،به کدهای من در پست اول اضافه کنید؟!
خیلی لطف میکنید.

rezashaban
چهارشنبه 19 اسفند 1394, 03:30 صبح
نمیشه عزیز.
خطای اور فلو میده.
خب دوست عزیز هر تابع بازگشتی یه نقطه پایانی داره و من این نقطه پایان رو داخل تابع شما نمیبینم
اگر شما اون نقطه پایان رو برای تابع تعریف کنید و اون خط کد هم که گفتم جابجا کنید کارتون درست میشه

batman1
چهارشنبه 19 اسفند 1394, 13:01 عصر
پایان کار،همون جایی هست که sw بسته میشه.

محمد آشتیانی
چهارشنبه 19 اسفند 1394, 13:50 عصر
سلام
همونطور که دوستمون گفتن ، تابع بازگشتی باید یک شرط خاتمه داشته باشه ، مثلا برای تابع بازگشتی محاسبه فاکتوریل ، این شرط وقتی اتفاق میفته که عدد ورودی به ۱ برسه ، و شما اساسا همچین شرطی نداری ، بنابراین اجرای تابع شما متوقف نمیشه
ضمنا توابع بازگشتی معمولا مقدار برمیگردونن ، متدی که شما نوشتی مقدار برنمیگردونه (void)




موفق باشید.