PDA

View Full Version : تحلیل شرط if



fshb_ 1370
یک شنبه 31 مرداد 1389, 10:21 صبح
سلام
چرا تو این برنامه if اول در هر صورت درسته؟ compiler ازش اررور نمیگیره، ولی اگه عددی هم وارد بشه که تو محدوده نباشه باز هم if اول اجرا میشه. این چه شکلی تحلیل میشه؟



#include <iostream>
using namespace std;
const char * qualify[4] = // an array of pointers
{ // to strings
"10,000-meter race.\n",
"mud tug-of-war.\n",
"masters canoe jousting.\n",
"pie-throwing festival.\n"
};
int main()
{
int age;
cout << "Enter your age in years: ";
cin >> age;
int index;
if (17<age<35)
index = 0;
else if (age >= 35 && age < 50)
index = 1;
else if (age >= 50 && age < 65)
index = 2;
else
index = 3;
cout << "You qualify for the " << qualify[index];
return 0;
}

Salar Ashgi
یک شنبه 31 مرداد 1389, 10:43 صبح
خوب آخه شرط تون رو اشتباه نوشتید ، مثل ریاضی نیست که عدد بین دو نامساوی
باشد ، تو این شرایط باید 2 شرط نوشت ، مثل if های پایین تان :



if(age>17 && age<35)

fshb_ 1370
یک شنبه 31 مرداد 1389, 11:12 صبح
خوب آخه شرط تون رو اشتباه نوشتید ، مثل ریاضی نیست که عدد بین دو نامساوی
باشد ، تو این شرایط باید 2 شرط نوشت ، مثل if های پایین تان :



if(age>17 && age<35)

این میدونم که نباید این جوری بنویسم. ولی اپراتورهای شرطی left-to-right هستند. پس اول باید age>17 بررسی بشه. من میگم چرا وقتی ageی که من وارد میکنم بزرگتر از 17 نیست باز هم ارروری نمیگیره و آن رو درست در نظر میگیره؟

Salar Ashgi
یک شنبه 31 مرداد 1389, 11:17 صبح
چرا وقتی ageی که من وارد میکنم بزرگتر از 17 نیست باز هم ارروری نمیگیره و آن رو درست در نظر میگیره؟

چون شرط تون رو اشتباه مینویسید ، اگه با شرط که بالا گفتم بنویسید ، مطمئنا مشکلی نخواهد بود .
اصلا به این if اول شما ، کامپایلر باید 100 درصد ، Error بده !

tdkhakpur
یک شنبه 31 مرداد 1389, 12:38 عصر
پس اول باید age>17 بررسی بشه. من میگم چرا وقتی ageی که من وارد میکنم بزرگتر از 17 نیست باز هم ارروری نمیگیره و آن رو درست در نظر میگیره؟

به فرض اگر age را برابر 15 قرار بدید شرط بصورت زیر بررسی میشه


17<15<35
که مرحله اول میشه
17<15 ->> = false
بررسی میشود
در این حالت عدد حاصل از قسمت اول false به حساب می آید و قانونا مقدار صفر هست پس مرحله دوم با جایگزاری نتیجه مرحله اول شرط میشه


0<35
که در این حالت هم شرط درست میشه
ولی اگر مقداری بزرگتر از 17 را هم بدید قضیه به همین شکل هست و مقدار برگشتی مرحله اول true میشه و خودتان هم میدانید که مقدار true هم همیشه 1 هست به همین دلیل همیشه if شما همیشه مقدار true را برگشت میده.