چرا حلقه با مقدار منفی بی نهایت بار اجرا میشه ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چرا حلقه با مقدار منفی بی نهایت بار اجرا میشه ؟

0 امتیاز

سلام بر همگی

من این کد رو تست می کنم تا بینهایت اجرا میشه دلیل چیه ؟

#include <string>

using namespace std;

int main() {
    string s = "tt";
    for (int i = 0; i < s.length() - 3; i++) {
        cout<<"!";
    }
}

 

سوال شده اسفند 2, 1392  بوسیله ی PSPCoder (امتیاز 1,301)   14 40 57
ویرایش شده اسفند 2, 1392 بوسیله ی PSPCoder

2 پاسخ

+2 امتیاز
 
بهترین پاسخ

علتش اینه که طول رشته ای که بهت میده به صورت unsigned هست و اعداد منفی رو پوشش نمیده 

	unsigned int t = 2;
	cout << t - 3 << endl;
	string s = "tt";
	cout << s.length() - 3 << endl ; // output are same

اگه بخوای درست عمل کنه باید cast کنیش به یک نوع متغیر که منفی ها رو هم قبول کنه

cout << (int)s.length() - 3 << endl ;

 

پاسخ داده شده اسفند 3, 1392 بوسیله ی Elyas74 (امتیاز 1,144)   6 14 27
انتخاب شد اسفند 4, 1392 بوسیله ی PSPCoder
+1 امتیاز

چون شرط حلقه شما دائما برقرار است یعنی عدد i که از صفر شروع میشود (و دائما به مقدار ان اضافه میشود)  همواره از مقدار منفی یک که مقدار سمت راست مقایسه است ، بیشتر است.

i < s.length() // samt chap hamishe bozorgTar az -1 ast

 

پاسخ داده شده اسفند 2, 1392 بوسیله ی mostafa.gh64 (امتیاز 71)   1 1 5
شرط جلقه > کوچیکتر هستش که هیچ وقت برقرار نیست ! یعنی i همیشه از -۱ بیشتره پس for بالا هیچ وقت نباید اجرا بشه در حالی که بی نهایت بار اجرا میشه .
شما جواب رو خوندین؟ نوشتن!! چون خروجی که length میده  unsigned هست و بنابراین وقتی منفی بشه اونو یه عدد بزرگ درنظر میگیره. باید اونو قبل از اینکه کم کنین int کنین. یا یه متغیر int تعریف کنین و s.length()-3 رو به اون نسبت بدین و از اون متغیر استفاده کینین.
...