C Programlama scanf() Fonksiyonu
C Programlama scanf() Fonksiyonu
scanf() Fonksiyonu : Programların çalışma esnasında veri girişine ihtiyaç duyabilirler. Kullanıcıların girdiği verileri işleyip değerlendirmemize yarayan fonksiyonlarda giriş fonksiyonları adı verilir. Örneğin printf fonksiyonu nasıl verinin ekrana yazdırılmasını sağlayan bir çıkış fonksiyonu ise scanf de printf fonksiyonunuda bunun tam tersi olarak düşünebiliriz.
Resimde görüldüğü gibi scanf fonksiyonunun ilk parametresi bir karakter disidir. Bu parametre kullanıcıdan hangi veri girişlerinden kaç tane beklendiğini derleyiciye anlatır. %d ifadesi bizden bir tamsayı istendiğini belirtirken, %d %f %d ifadesi sırasıyla bir tamsayı, bir ondalık sayı ve bir tamsayı olmak üzere üç adet değer istendiğini ifade eder. scanf fonksiyonunun sonraki parametreleri ise değerlerin depolanacağı değişkenlerin bellek adresleri olmalıdır.
Tip Karakteri
İşlevi
Tipi
%c
tek bir karakter
char
%d veya %i
işaretli ondalık tamsayı
int, short
%ld
uzun işaretli ondalık tamsayı
long
%u
işaretsiz ondalık tamsayı
unsigned int, unsigned short
%f
Gerçel sayı
float, double
%s
karakter dizisi (string)
char
%lu
işaretsiz uzun tamsayı
unsigned long
%x
Hexa decimal sayılar
%o
Octal sayılar
Örnek
#include <stdio.h>
int main(int argc, char** argv){
int s1,s2;
printf("2 adet sayi girisi yapiniz:");
scanf("%d %d", &s1, &s2);
printf("girilen sayilar:%d ve %d", s1,s2);
return 0;
}
Örnekte scanf ile iki tamsayı alınmış ve alınan değerler prinf ile ekrana yazdırılmıştır.Fonksiyonun ilk parametresinde %d %d ile kullanıcıdan arada boşluk bırakılarak iki adet tam sayı girilmesi istenmiştir.İkinci ve üçüncü parametrelerde ise değerlerin tutulacağı bellek adresleri s1,s2 olarak belirlenmiştir. Bir değişkenin hemen önüne & işareti geldiğinde o değişken bellek adresini referans göstermektedir. Bunun nedeni scanf fonksiyonu bir giriş fonksiyonu olması nedeniyle değişkenlerin değerleriyle değil bellek adreslerini kullanacak şekilde tasarlanmış olmasıdır. Bu durum diziler için geçerli değildir! Çünkü dizi (string) türünden değişkenlerde dizinin adı zaten o dizinin ilk elemanının bellek adresini gösterir. Böylelikle dizi türünden değişkenlerde & işareti kullanımına gerek yoktur.
Örnek
#include <stdio.h>
int main(int argc, char** argv){
char marka[30];
printf("Lutfen monitorunuzun markasini giriniz:");
// scanf("%s", &marka); Bu sekilde kullanim hatalidir//
scanf("%s", marka); //Bu sekilde kullanim dogrudur//
printf("Monitorunuzun markasi %s", marka);
return 0;
}
Örnek
#include <stdio.h>
void main (void){
int s1;
double s2;
float s3;
char isim[20], web[30];
printf("Lutfen integer bir deger giriniz:");
scanf("%d", &s1);
printf("Girilen integer deger %d dir.nn", s1);
printf("Lutfen double bir deger giriniz:");
scanf("%lf", &s2);
printf("Girilen double deger %g idinn", s2);
printf("Lutfen integer ve bir float deger giriniz:");
scanf("%d %f", &s1, &s3);
printf("Girilen degerler %d ve %f idi.n", s1,s3);
printf("isminizi giriniz:");
scanf("%s", &isim);
printf("web adresinizi giriniz: ");
scanf("%s", &web);
printf("Girilen isim: %sn", isim);
printf("Girilen web adresi:%sn", web);
system("pause");
return(0);
}
Örnek
void scanfornek2(){
int sayi1, sayi2;
printf("n Birinci Hex Sayiyi Giriniz: ");
scanf("%x", &sayi1);
printf("n Girdiginiz sayinin karsiligi: %d ", sayi1);
printf("n Ikinci Hex Sayiyi Giriniz: ");
scanf("%x", &sayi2);
printf("n Girdiginiz sayinin karsiligi: %d ", sayi2);
printf("n sayilarin hex toplami: 0x%x sayilarin decimal toplami: %d",sayi1+sayi2, sayi1+sayi2);
}
Örnek
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
char ch;
char str[100];
printf("Enter any character n");
scanf("%c", &ch);
printf("Entered character is %c n", ch);
printf("Enter any string(upto 100 character) n");
scanf("%s", &str);
printf("Entered string is %s n", str);
return (EXIT_SUCCESS);
}
scanf() Fonksiyonu : Programların çalışma esnasında veri girişine ihtiyaç duyabilirler. Kullanıcıların girdiği verileri işleyip değerlendirmemize yarayan fonksiyonlarda giriş fonksiyonları adı verilir. Örneğin printf fonksiyonu nasıl verinin ekrana yazdırılmasını sağlayan bir çıkış fonksiyonu ise scanf de printf fonksiyonunuda bunun tam tersi olarak düşünebiliriz.
Resimde görüldüğü gibi scanf fonksiyonunun ilk parametresi bir karakter disidir. Bu parametre kullanıcıdan hangi veri girişlerinden kaç tane beklendiğini derleyiciye anlatır. %d ifadesi bizden bir tamsayı istendiğini belirtirken, %d %f %d ifadesi sırasıyla bir tamsayı, bir ondalık sayı ve bir tamsayı olmak üzere üç adet değer istendiğini ifade eder. scanf fonksiyonunun sonraki parametreleri ise değerlerin depolanacağı değişkenlerin bellek adresleri olmalıdır.
Tip Karakteri
|
İşlevi
|
Tipi
|
%c
|
tek bir karakter
|
char
|
%d veya %i
|
işaretli ondalık tamsayı
|
int, short
|
%ld
|
uzun işaretli ondalık tamsayı
|
long
|
%u
|
işaretsiz ondalık tamsayı
|
unsigned int, unsigned short
|
%f
|
Gerçel sayı
|
float, double
|
%s
|
karakter dizisi (string)
|
char
|
%lu
|
işaretsiz uzun tamsayı
|
unsigned long
|
%x | Hexa decimal sayılar | |
%o | Octal sayılar |
Örnek
#include <stdio.h>
int main(int argc, char** argv){
int s1,s2;
printf("2 adet sayi girisi yapiniz:");
scanf("%d %d", &s1, &s2);
printf("girilen sayilar:%d ve %d", s1,s2);
return 0;
}
int main(int argc, char** argv){
int s1,s2;
printf("2 adet sayi girisi yapiniz:");
scanf("%d %d", &s1, &s2);
printf("girilen sayilar:%d ve %d", s1,s2);
return 0;
}
Örnekte scanf ile iki tamsayı alınmış ve alınan değerler prinf ile ekrana yazdırılmıştır.Fonksiyonun ilk parametresinde %d %d ile kullanıcıdan arada boşluk bırakılarak iki adet tam sayı girilmesi istenmiştir.İkinci ve üçüncü parametrelerde ise değerlerin tutulacağı bellek adresleri s1,s2 olarak belirlenmiştir. Bir değişkenin hemen önüne & işareti geldiğinde o değişken bellek adresini referans göstermektedir. Bunun nedeni scanf fonksiyonu bir giriş fonksiyonu olması nedeniyle değişkenlerin değerleriyle değil bellek adreslerini kullanacak şekilde tasarlanmış olmasıdır. Bu durum diziler için geçerli değildir! Çünkü dizi (string) türünden değişkenlerde dizinin adı zaten o dizinin ilk elemanının bellek adresini gösterir. Böylelikle dizi türünden değişkenlerde & işareti kullanımına gerek yoktur.
Örnek
Örnek
#include <stdio.h>
int main(int argc, char** argv){
char marka[30];
printf("Lutfen monitorunuzun markasini giriniz:");
// scanf("%s", &marka); Bu sekilde kullanim hatalidir//
scanf("%s", marka); //Bu sekilde kullanim dogrudur//
printf("Monitorunuzun markasi %s", marka);
return 0;
}
int main(int argc, char** argv){
char marka[30];
printf("Lutfen monitorunuzun markasini giriniz:");
// scanf("%s", &marka); Bu sekilde kullanim hatalidir//
scanf("%s", marka); //Bu sekilde kullanim dogrudur//
printf("Monitorunuzun markasi %s", marka);
return 0;
}
#include <stdio.h>
void main (void){
int s1;
double s2;
float s3;
char isim[20], web[30];
printf("Lutfen integer bir deger giriniz:");
scanf("%d", &s1);
printf("Girilen integer deger %d dir.nn", s1);
printf("Lutfen double bir deger giriniz:");
scanf("%lf", &s2);
printf("Girilen double deger %g idinn", s2);
printf("Lutfen integer ve bir float deger giriniz:");
scanf("%d %f", &s1, &s3);
printf("Girilen degerler %d ve %f idi.n", s1,s3);
printf("isminizi giriniz:");
scanf("%s", &isim);
printf("web adresinizi giriniz: ");
scanf("%s", &web);
printf("Girilen isim: %sn", isim);
printf("Girilen web adresi:%sn", web);
system("pause");
return(0);
}
void main (void){
int s1;
double s2;
float s3;
char isim[20], web[30];
printf("Lutfen integer bir deger giriniz:");
scanf("%d", &s1);
printf("Girilen integer deger %d dir.nn", s1);
printf("Lutfen double bir deger giriniz:");
scanf("%lf", &s2);
printf("Girilen double deger %g idinn", s2);
printf("Lutfen integer ve bir float deger giriniz:");
scanf("%d %f", &s1, &s3);
printf("Girilen degerler %d ve %f idi.n", s1,s3);
printf("isminizi giriniz:");
scanf("%s", &isim);
printf("web adresinizi giriniz: ");
scanf("%s", &web);
printf("Girilen isim: %sn", isim);
printf("Girilen web adresi:%sn", web);
system("pause");
return(0);
}
Örnek
void scanfornek2(){
int sayi1, sayi2;
printf("n Birinci Hex Sayiyi Giriniz: ");
scanf("%x", &sayi1);
printf("n Girdiginiz sayinin karsiligi: %d ", sayi1);
printf("n Ikinci Hex Sayiyi Giriniz: ");
scanf("%x", &sayi2);
printf("n Girdiginiz sayinin karsiligi: %d ", sayi2);
printf("n sayilarin hex toplami: 0x%x sayilarin decimal toplami: %d",sayi1+sayi2, sayi1+sayi2);
}
int sayi1, sayi2;
printf("n Birinci Hex Sayiyi Giriniz: ");
scanf("%x", &sayi1);
printf("n Girdiginiz sayinin karsiligi: %d ", sayi1);
printf("n Ikinci Hex Sayiyi Giriniz: ");
scanf("%x", &sayi2);
printf("n Girdiginiz sayinin karsiligi: %d ", sayi2);
printf("n sayilarin hex toplami: 0x%x sayilarin decimal toplami: %d",sayi1+sayi2, sayi1+sayi2);
}
Örnek
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
char ch;
char str[100];
printf("Enter any character n");
scanf("%c", &ch);
printf("Entered character is %c n", ch);
printf("Enter any string(upto 100 character) n");
scanf("%s", &str);
printf("Entered string is %s n", str);
return (EXIT_SUCCESS);
}
#include <stdlib.h>
int main(int argc, char** argv) {
char ch;
char str[100];
printf("Enter any character n");
scanf("%c", &ch);
printf("Entered character is %c n", ch);
printf("Enter any string(upto 100 character) n");
scanf("%s", &str);
printf("Entered string is %s n", str);
return (EXIT_SUCCESS);
}