9.3 main() Fonksiyonuna Parametre Aktarımı
9.3 main() Fonksiyonuna Parametre Aktarımı
NOT
|
Ana programa parametre aktarımı, derlenmiş (çalıştırılabilir) bir program komut satırından (işletim sistemi ortamından) çalıştırılacağı zaman yapılır. Parametre aktarımı, programın adı yazılıp bir boşluk bırakıldıktan hemen sonra yapılır. Parametreler, komut satırından sayısal olarak girilse bile program içinde karakter topluluğu (string) olarak gelir. Bu durumda, bu ifadeleri sayısal değerlere çeviren (atoi(), atol(), atof() gibi) fonksiyonlar kullanılır[1].
Genel kullanım biçimi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
... int main(arguman_sayısı, arguman_vektörü) int arguman_sayısı; char *arguman_vektörü[]; { . . . if(arguman_sayısı < ...){ printf("Eksik parametre !\n"); exit(1); } if(arguman_sayısı > ...){ printf("Cok fazla parametre !\n"); exit(1); } . ... arguman_vektörü[0]... /* 1. eleman program adı */ ... arguman_vektörü[1] ... /* 2. eleman 1. parametre */ ... arguman_vektörü[2] ... /* 3. eleman 2. parametre */ . } |
Program 9.1, komut satırından girilen iki sayının toplamını hesaplar.
Program 9.1: Komut satırından girilen iki sayının toplamını hesaplar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* topla.c Komut satırından girilen iki sayının toplamını hesaplar. Kullanımı: topla sayı1 sayı2 */ #include <stdio.h> #include <stdlib.h> int main(int argsay, char *argvek[]){ int toplam; if(argsay < 3){ printf("Eksik parametre !\n"); exit(1); } if(argsay > 3){ printf("Cok fazla parametre !\n"); exit(1); } toplam = atoi(argvek[1]) + atoi(argvek[2]); printf("Toplamlari %d\n",toplam); return 0; } |
Program 9.1, topla.c derlendikten sonra üretilen Windows ortamında üretilen topla.exe ve Linux ortamında üretilen topla dosyasının çalıştırılması şöyledir:
- Turbo C 2.0 Derlecisi kullanılarak (topla.c programı C:\TC adlı dizinin altına kaydedildiği varsayılmıştır)
- Dev-C++ Derlecisi kullanılarak (topla.c programı C:\Users\bingul\Desktop adlı dizinin altına kaydedildiği varsayılmıştır)
- Linux gcc derleyicisi kullanılarak (topla.c programı /home/bingul/ adlı dizinin altına kaydedildiği varsayılmıştır)
Komut satırında yazılan dosya adı dahil toplam parametre sayısı 3 tür. Bunlar:
1 2 3 4 |
topla 4 9 | | | V V V argvek[0] argvek[1] argvek[2] |
şeklindedir.
Program 9.1, komut satırından girilen iki sayının toplamını hesaplar. Bu programın daha gelişmiş hali Program 9.2’de verilmiştir. Program 9.2 çalıştırıldığında, komut satırından girilen iki sayı ve bir operatör bekler. Girilen operatöre göre beş aritmetik işlemden birinini yapıp sonucu ekranda gösterir. İnceleyiniz.
Program 9.2: Komut satırından girilen iki sayı ve bir operatör bilgisine göre 5 işlemden birini hesaplar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/* hesap.c: Komut satırından girilen iki sayı üzerinde 5 işlem yapar. Kullanımı: hesap <sayi1> <operator> <sayi2> */ #include <stdio.h> #include <stdlib.h> int main(int args, char **argv) { int s1, s2; float sonuc; char op; if(args != 4){ printf("Eksik veya fazla parametre !\n"); printf("Kullanimi: hesap <sayi1> <operator> <sayi2>\n"); return 1; } s1 = atoi(argv[1]); /* 1. parametre: sayi1 */ op = argv[2][0]; /* 2. parametrenin ilk karakteri: operator */ s2 = atoi(argv[3]); /* 3. parametre: sayi2 */ switch(op) { case '+': sonuc = s1 + s2; break; case '-': sonuc = s1 - s2; break; case '*': sonuc = s1 * s2; break; case '/': sonuc = (float) s1 / s2; break; case '%': sonuc = s1 % s2; break; default: sonuc = 0.0; printf("Yanlis operator %c\n",op); printf("Operatorler: +, -, *, / veya %%\n"); } printf("sonuc = %f\n",sonuc); return 0; } |
Program hesap.c adlı dosyada saklandığı varsayılırsa, programın Linux ortamındaki çıktısı şöyle olacaktır: