Qanday qilib ((x) || (y = z)) ishlaydi?

Bu holatda if statement qanday ishlayotganini tushunmayapman. x! = 0 iborasini ko'rib chiqadi va u noto'g'ri bo'lsa, z uchun y va break < kodi if statement?

int main()
{
    int x, y, z, i;
    x = 3;
    y = 2;
    z = 3;

    for (i = 0; i < 10; i++) {
        if ((x) || (y = z)) {
            x--;
            z--;
        } else {
            break;
        }
    }

    printf("%d %d %d", x, y, z);
}
8
@SouravGhosh: Men rozilik beraman, birinchi navbatda disk raskadrovka qilishga urinib ko'rish yaxshiroqdir, lekin bu muayyan holatda bu juda foydali bo'lmaydi deb qo'rqaman.
qo'shib qo'ydi muallif Matthieu M., manba
@SouravGhosh: Adolatli bo'lish uchun disk raskadrovchilar faqat bitta ifodalarning ichki ishlashini ko'rsatishda katta ahamiyatga ega emas.
qo'shib qo'ydi muallif Matthieu M., manba
Bu biz "C" ning qisqa tutashuvi deb ataydimi?
qo'shib qo'ydi muallif 707, manba
@TonyTannous meni ham: Havo Vane, 105 yoshida 3/4 .... agar main hech qanday qaytarilmasa qaytib, hech qanday joyga to .
qo'shib qo'ydi muallif Weather Vane, manba
@TonyTannous main - bu majburiy emas funksiyasining aniq funktsiyasidir. C va C ++ da asosiy() qaytib kelishi kerak? ni o'qing. >
qo'shib qo'ydi muallif Weather Vane, manba
@Mattium. Ehtimol, siz haqsiz, lekin bu menga yoki hech kimni hech kimdan hech qanday harakat qilishni to'xtatish uchun sabab emas. :) Yana bir noxushlik uchun, biz bu erda qoldik.
qo'shib qo'ydi muallif Sourav Ghosh, manba
@Waravan, Chad shu sababli StackOverflowda bo'lishni yaxshi ko'raman. Men bilmagan kundalik narsalarni o'rganaman. Rahmatlar!
qo'shib qo'ydi muallif Tony Tannous, manba
@Chad nima uchun void main() ega bo'lish yomon emas?
qo'shib qo'ydi muallif Tony Tannous, manba
y = z - bu taqqoslash emas!
qo'shib qo'ydi muallif πάντα ῥεῖ, manba
@TonyTannous Asosiy har doim bir int qaytaradi.
qo'shib qo'ydi muallif NathanOliver, manba
Sizning kitobingiz haqiqatdan ham da bu kitobni chiqarish uchun void main() vaqtiga ega bo'lsa.
qo'shib qo'ydi muallif Chad, manba
@NathanOliver C99 5.1.2.2.1 "U int yoki qaytarish turi bilan belgilanadi ... yoki amalga oshiriladigan boshqa yo'l bilan aniqlanadi." Kitob, asosiyni bekor qilishni aniqlaydigan ba'zi bir ilovalar uchun bo'lishi mumkinmi?
qo'shib qo'ydi muallif Vality, manba
@NathanOliver Bundan tashqari, "Dasturning ishga tushirilishida chaqiriladigan funktsiyaning nomi va turi dasturiy ta'riflangan erkin dasturlarda (C dasturining bajarilishi operatsion tizimning foydasi bo'lmaganda) amalga oshiriladi." Kitob shuningdek, ba'zi bir ichki erkin muhit uchun dasturlarni nazarda tutishi ham mumkin.
qo'shib qo'ydi muallif Vality, manba
Agar x nol bo'lsa, u y = z qismini qilmaydi va agar bo'lsa tanasi bajaradi. x nol bo'lganida y = z kodi va z nol bo'lmagan bo'lsa, > agar tanasi bajarilsa. break faqat x va z bo'lsa ham, nol bo'ladi.
qo'shib qo'ydi muallif Dmitri, manba
Menimcha, bu misol faqat JavaScript-ni bolalarni tashlab ketish uchun mavjud.
qo'shib qo'ydi muallif Filburt, manba
|| bo'lgan shartli yoki u birinchi sharti yolg'on bo'lsa, to'g'ri kuni bayonot amalga bo'ladi.
qo'shib qo'ydi muallif noel zubin, manba
ammo C kodi z uchun y belgisini qo'yadi va keyin y to'g'ri ekanligini tekshiradi.
qo'shib qo'ydi muallif Nils, manba
Ha men bilaman. Ushbu kod kitobdan olingan va uni tushunishga harakat qilaman.
qo'shib qo'ydi muallif Mike B., manba
Sizga katta rahmat, Dimitriy, hozir hamma narsa aniq.
qo'shib qo'ydi muallif Mike B., manba

6 javoblar

Buni kichikroq bitlarga aylantiraylik.

  1. if (x) - agar (x! = 0) bilan bir xil bo'lsa. Agar x! = 0 bo'lsa, u holda rost holatini bilasiz, shuning uchun agar bo'lsa p>

  2. Agar false qismi bo'lsa, y = z z kodini y y ning yakuniy qiymatini qaytaradi.

  3. 2-banddan biz if (y = z) y = z ga teng ekanligini tushunishimiz mumkin; agar (y! = 0)


Shunday qilib, 1. va 3.-bandlardan biz quyidagicha tushunamiz:

if ((x) || (y = z)) {
    doSomething();
}
else {
    doSomethingElse();
}

Shu bilan bir xil:

if (x != 0) {
    doSomething();
}
else {
    y = z;
    if (y != 0) {
        doSomething();
    }
    else {
        doSomethingElse();
    }
}

Bu haqiqatan ham to'g'ri o'qilmaydi.

30
qo'shib qo'ydi

Yo'q. if ((x) || (y = z)) { C-Ingliz tilida asosan:

  • agar x ssenariysi bo'lmasa, quyidagi kodni ko'rib chiqing.
  • agar x nol bo'lsa y ni z ga o'rnating.
  • agar y nol bo'lsa, quyidagi kodni ko'rib chiqing.
  • aks holda, pastadirdan chiqib ketish.

Agar x nol yoki y nol bo'lsa, u loopdan chiqadi.

18
qo'shib qo'ydi
@ user1952500 Rahmat. Tahrirlangan.
qo'shib qo'ydi muallif MD XF, manba
@OlimDancha to'g'ri. Tushunarli.
qo'shib qo'ydi muallif MD XF, manba
(y = z) faqat x == 0 bo'lganda bajariladi.
qo'shib qo'ydi muallif Weather Vane, manba
Men "quyidagi kodni" bir oz noto'g'ri deb topaman. So'zning keyingi qismini anglatadimi? Yoki if-statementning tanasi? (Albatta, ikkinchisi haqiqatdir.)
qo'shib qo'ydi muallif Melebius, manba
Sizning oxirgi satringiz " x nol va y nol bo'lsa ...» ifodasini o'qishi kerak.
qo'shib qo'ydi muallif Shaggy, manba
Bu erda engil xato bor. Agarda x IS 0 bo'lsa, y ni z deb belgilab qo'ying va y 0 emas
qo'shib qo'ydi muallif user1952500, manba
Sizning javobingiz menikidan ham yaxshiroqdir! Inglizcha tarjima. Kelajakdagi tushuntirishlar uchun eslayman.
qo'shib qo'ydi muallif Anthony D., manba
int main()
{
    int x = 3;
    int y = 2;
    int z = 3;
    unsigned int i;

    for (i = 0; i < 10; i++)
        if (x != 0) {
            x = x-1;
            z = z-1;
        } 
        else {
            y = z;

            if (y != 0) {
                x = x-1;
                z = z-1;
            }
            else {
                break;
            }
        }
    }
    printf("%d %d %d", x, y, z);
}
7
qo'shib qo'ydi
Iltimos, void main() uchun va'z qilmang.
qo'shib qo'ydi muallif Sourav Ghosh, manba
Endi ko'rayapman :). OK, siz OP uchun chuqur o'ylab ko'rishingiz kerak.
qo'shib qo'ydi muallif Tony Tannous, manba

Cda qisqa tutashuvi mavjud, shuning uchun y = z kodi x nolga teng bo'lmagunga qadar baholanmaydi.

x == 0 bo'lsa, z ham xuddi shunday tarzda kamayadi, z == 0 . Shuning uchun y vazifasi tufayli o'sha vaqtda nol bo'ladi. Ushbu kodda y = z so'zini qaytaradi va bu kod 0 bo'lgani uchun y > else ifodasi uriladi.

Shuning uchun javobni 0 0 0 bo'lishi kerakligiga ishonaman.

3
qo'shib qo'ydi

Agar if iborasida topshiriqdan foydalanganda, topshiriqning natijasi qaytariladi. shuning uchun yozing:

if (x = y)

y qiymati 0 bo'lmasa, har doim to'g'ri bo'ladi, shuning uchun 0 tayinlash natijasi sifatida qaytariladi va if ifodasi bajarilmaydi ( 0 dan boshqa biror narsa to'g'ri deb qabul qilinadi).

Shuning uchun yozsangiz:

if ( x || (x = y))

The if statement doesn't execute only if x is 0 & y is 0.

1
qo'shib qo'ydi

Bu yerda

if ((x) || (y = z))

tBu yerdaare two condition one condition is if ((x)) and another condition is if ((y = z)) if one of them is true then if portion is execute otherwise else condition work

  • faqat va har ikkala holat ham noto'g'ri bo'lsa, keyin bajariladi.
0
qo'shib qo'ydi