Tez-tez rast gəlinən səhvlər

1.Münasibət ifadəsindən sonra nöqtə vergül (;) qoymaq ol­maz:­

if (num% 2 ==0); // buradanöqtə vergül yazmaq olmaz!

cout<<” reqem cutdur”<<endl;

2.Bir neçə şərt operatoru üçün sistem mötərizələri vacibdir:

if (num %2==0)

cout<<” reqem cutdur”<<endl;

cout<<” Reqem cut deyil”<<endl;

Əgər istifadəçi tək ədəd, məsələn, 13 daxil edərsə, onda

cout<<” reqem cutdur”

instruksiyası işləməyəcək, ona görə ki, münasibət ifadəsinin qiy­məti yalana bərabərdir. Lakin növbəti

”Reqem cut deyi­l”­­­ ­

simvol sətri təsvir olunacaq. Ona görə ki,

cout <<”Reqem cut deyil”

instruksiyasışərt ope­ra­toruna aid deyil.

Misal 4.3.

#include <cstdlib>

#include <iostream>

#include<conio.h>

using namespace std;

int main(int argc, char *argv[])

{int num;

cin>>num;

if(num%2==0)

cout<<"reqem cutdur"<<endl;

cout<<"Reqem cut deyil"<<endl;

getch();

return 0;

}

 

Əgər şərt operatorunda bir instruksiyadan ço­xu­nun yerinə ye­ti­rilməsini istəyiriksə, onda bu instruk­si­ya­ları hökmən sistem mö­tərizələri daxilinə almalıyıq:

if (num % 2 ==0)

{

cout<<” reqem cutdur”<<endl;

cout<<” Reqem tek deyil”<<endl;

}

Burada yalnız məntiqi ifadə doğruya bərabər ol­duq­­da iki ifadə yerinə yetiriləcək.

 

 

3.Bərabərlik operatoru əvəzinə mənimsətmə opera­to­ru­­nu istifadə etmək olmaz.

if (num% 2 =0) // düzgün olmayan operator!

cout<<” Reqem cut deyil”<<endl;

Nəticədə məntiqi ifadə müqayisənin nəticəsi kimi emal olun­ma­yacaq. Bunun əvəzinə o, son mənimsətmə nəticəsi olaraq mö­tərizədəki ifadəni alacaq, burada sıfır olmayan qiymət doğru, sı­­fır qiymət isə yalan hesab olunur.

4.if –siz else yoxdur!

Qeyd edək ki, else hissəsi olmayan if ola bilər, lakin bunun ək­­si ola bilməz. else hissəsi şərt operatorunun hissəsi ol­ma­lı­dır. Ona görə də if xidməti sözlü məntiqi ifadədən sonra qoyu­lan nöqtəli vergül (;) kompilyator tərəfindən səhv kimi qeyd olu­nacaq. Belə ki, sistem mötərizələri istifadə olunmurlar, if şərt operatoru isə qeyri-düzgün qoyulmuş nöqtə vergüldən ya­ra­­­nan boş operatordan sonra sona çatır. Onda cout<<”Reqem tek deyil”- instruksiyası if şərt operatorunun hissəsi deyil. Ona görə də else hissəsi də if operatorunun hissəsi olmayacaq və if-siz else kimi qiymətləndiriləcək.

if(num %2 ==0);// burada nöqtə-vergül qoymayın!

cout<<” reqem cutdur”<<endl;

else(num % 2==1)

cout<<” Reqem cut deyil”<<endl;

5.else xidməti sözündən sonra məntiqi ifadə (münasibət ifa­də­si) yazmayın! Qeyd edək ki, bu proqramın kompil­ya­si­ya­sı və işləmə­sin­də səhv­lərə gətirmir, səhv nəticənin alın­ma­sına sə­bəb olur:

if (num%2==0)

cout<<” reqem cutdur”<<endl;

else (num%2==1)

cout<<” Reqem cut deyil”<<endl;

Bu proqram kompilyasiya olunmayacaq və else sözündən son­ra­kı cout instruksiyası aşağıdakı səhvlə işıqlandırılacaq:

“missing ‘;’ before identifier ‘cout’ ”.

Burada cout instruksiyası ilə hər şey qaydasındadır, lakin sa­də­cə olaraq else xidməti sözündən sonra münasibət ifadəsi gələ bilməz.

6.else-dən sonra nöqtə vergül (;) qoymayın!

Bu halda da proqramın kompilyasiyası və ya işləməsi zama­nı səhv haqqında məlumat çıxarılmayacaq, lakin səhv nəticə alınacaq. Məsələn, aşa­ğı­da­kı kodda cout<<”Reqem cut deyil”; instruksiyası hət­ta daxil edilən ədəd cüt olduqda belə işləyəcək.

if (num %2 ==0)

cout<<” reqem cutdur”<<endl;

else; //burada nöqtə vergül qoymayın!

cout<<” Reqem cut deyil”<<endl;

Burada cout<<” Reqem cut deyil” instruksiyasımüna­si­bət ifa­də­sinin doğru və ya yalan qiymət almasından asılı olma­ya­raq iş­­ləyəcək, ona görə ki, cout instruksiyası indi if şərt ope­ra­to­ru­nun hissəsi deyil.

Proqramın if hissəsi üçün deyilən səhv­lər, el­se­­ if hissəsinə də aiddir.

Bundan başqa if-siz else if hissəsi ola bilməz, lakin else hissəsi olmayan bir və ya bir neçə else if hissəsi və if hissəsi ola bilər.