Tez-tez rast gəlinən səhvlər
1.Münasibət ifadəsindən sonra nöqtə vergül (;) qoymaq olmaz:
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 qiyməti yalana bərabərdir. Lakin növbəti
”Reqem cut deyil”
simvol sətri təsvir olunacaq. Ona görə ki,
cout <<”Reqem cut deyil”
instruksiyasışərt operatoruna 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 çoxunun yerinə yetirilməsini istəyiriksə, onda bu instruksiyaları 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 olduqda iki ifadə yerinə yetiriləcək.
3.Bərabərlik operatoru əvəzinə mənimsətmə operatorunu 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 olunmayacaq. 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 əksi ola bilməz. else hissəsi şərt operatorunun hissəsi olmalıdır. Ona görə də if xidməti sözlü məntiqi ifadədən sonra qoyulan nöqtəli vergül (;) kompilyator tərəfindən səhv kimi qeyd olunacaq. Belə ki, sistem mötərizələri istifadə olunmurlar, if şərt operatoru isə qeyri-düzgün qoyulmuş nöqtə vergüldən yaranan 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 ifadəsi) yazmayın! Qeyd edək ki, bu proqramın kompilyasiyası və işləməsində səhvlərə gətirmir, səhv nəticənin alınması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 sonrakı 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 sadə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 zamanı səhv haqqında məlumat çıxarılmayacaq, lakin səhv nəticə alınacaq. Məsələn, aşağıdakı kodda cout<<”Reqem cut deyil”; instruksiyası hətta 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ünasibət ifadəsinin doğru və ya yalan qiymət almasından asılı olmayaraq işləyəcək, ona görə ki, cout instruksiyası indi if şərt operatorunun hissəsi deyil.
Proqramın if hissəsi üçün deyilən səhvlər, else 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.