C dili getchar() fonksiyonu ve birkaç şey ile ilgili sorum var

Bu konuyu okuyanlar

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Selamlar.Öncelikle getchar() fonksiyonun işlevini kitapta veya başka yerlerde araştırıp okumama rağmen pek anlamadığım için bu fonksiyonun işlevini sormak istiyorum.Ve şu ss ile ilgili olarak getchar()=ch yazsak ne fark eder, neden burada scanf("%c",&ch) kullanamıyoruz?Bir de printf(Girdiğiniz harf %c dir. ,ch)'de neden girdiğimiz harf çıkmıyor da bunu %d ile yapınca çıkıyor.Yardımcı olursanız sevinirim:):):oops:
.
31png.png
 
Katılım
14 Ekim 2016
Mesajlar
121
Reaksiyon puanı
30
Puanları
28
Orada 1 bitlik saklama işlemi yapıyor. %d ile yazınca çıkmasının sebebi, dosyanın pointer'ını char değil integer olarak bellekte saklaması.
 

Murat ince

Öğrenci
Katılım
18 Ocak 2017
Mesajlar
31
Reaksiyon puanı
13
Puanları
8
Yaş
42
Main fonksiyonunu " int " yerine " char " olarak tanımlaması lazım doğru mu?
 

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Main fonksiyonunu " int " yerine " char " olarak tanımlaması lazım doğru mu?
Dediğinizi denedim dev-c/c++ derleyicisinde hata verdi dolayısıyla programı çalıştırmadı ancak ingilizce bir forumdan okuduğuma göre derleyiciler hata verse bile yapılabilir falan diyordu ama tam bilmiyorum.Bu konu hakkında bilgili arkadaşlar bilgilendirebilir bizi:):)
 
Katılım
14 Ekim 2016
Mesajlar
121
Reaksiyon puanı
30
Puanları
28
Dediğinizi denedim dev-c/c++ derleyicisinde hata verdi dolayısıyla programı çalıştırmadı ancak ingilizce bir forumdan okuduğuma göre derleyiciler hata verse bile yapılabilir falan diyordu ama tam bilmiyorum.Bu konu hakkında bilgili arkadaşlar bilgilendirebilir bizi:):)

Derleyici hatası çok nadir olur. Kullandığınız derleyicide koda eklediğiniz kütüphanenin olmaması vb. gibi durumlarda olur.
 

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Derleyici hatası çok nadir olur. Kullandığınız derleyicide koda eklediğiniz kütüphanenin olmaması vb. gibi durumlarda olur.
stdio.h ve locale.h'yi ekledim onlar da dev-c/c++'da var diye biliyorum. Çünkü başka programları yazarken bir sıkıntı çıkartmadı sadece char main() yazmayı denedim arkadaşın dediği gibi [Error] '::main' must return 'int' hatasını verdi
 
Katılım
14 Ekim 2016
Mesajlar
121
Reaksiyon puanı
30
Puanları
28
char main() diye bir fonksiyon yok çünkü de ondan. :) Tavsiyem main kısmını void olarak tanımlamanız, yani "main()" şeklinde. int main() nadir de olsa derleme hatalarına sebep olabilir.
 

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Bazen baktığım kitaplarda falan main(void) tarzı ifadeler görüyorum bunların int main() ile farkı nedir ve neden hata yapabilme imkanı var?Size de çok soru sorduk ama kusura bakmayın:oops::oops::oops:
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Merhaba,


klavyeden bir harf almak için çeşitli fonksiyonlar var. Bunların kullanımlarını internet üzerindeki tutorials'lardan öğrenebilirsiniz. Ayrıca yazmış olduğunuz kod içerisinde bir akış hatası var. Yani getchar() fonksiyonunu "printf("Bir harf giriniz : ")" 'den sonra yazmanız gerekir. İlk hatanız bu.


İngilizce bu konuda mutlaka şart. Ülkemizde de çok değerli meslektaşlarımızında web sayfalarını Türkçe olarak ziyaret edebilirsiniz.
Bazı ingilizce C/C++ için referans web sayfaları :
cprogramming
learncpp
codeguru

Türkçe olarak :
csystem
kaanaslan

Daha da çoğaltılabilir.

Kullanılabilecek bazı fonksiyonlar : get(), getc(), gtchar(), getche()

Ardından klavyeden harf almak için şu aşağıdaki yazılım parçası da kullanılabilir;

Kod:
char och;
och = cin.get();

Bu tip bir yazım şekli, standart girdi cihazından (klavye) bir karakter alır ve ekranda görüntülemeden bir karakter(lik) değer döndürür.

getchar() : Bir makro fonksiyondur. Standart giriş dosyasından (stdin) bir karakter okur ve çağırana gönderir.

scanf hakkında :
Bildirimi : int scanf(const char *format, argumanlar);
Çoğu derleyicide klavyeye atanmış olan standart girişten (stdin) veri okumak için kullanılır. Bu fonksiyon, gerçekte herşeyi katar/dizi/karakter katarı olarak okur; daha sonra katardaki karakterlerin nasıl yorumlanacağını, verilen formata göre yapar.

Yazdığınız koları birde aşağıdaki gibi düzenlerseniz olur.

Kod:
setlocale(LC_ALL, "");
char ch;
printf("bir harf giriniz : ");
scanf("%c", &ch);
printf("girdiginiz harf %c dir", ch);

İlk olarak klavyeden bir harf alıyordunuz ve sonra "bir harf girin" diyordunuz. Bunu düzelttik ve printf altına taşıdık. Ama yine de bir yanlışlık var..
Zaten siz getchar() fonksiyonu ile bir karakter okuyorsunuz standart girişten ve ardından yine scanf ile standart girişten bir harf veya bir veri okumaya çalışıyorsunuz. Sizce ne gelecek ? Tabii ki gelen /n olacak. Veya farklılık gösterirse farklı derleyicilerde null, LF/Line feed, new line şeklinde..
Zaten değer okudunuz ve birdaha okumaya çalışıyorsunuz.. Scanf fonksiyonu string okumalarda veya formatlı dönüşümlerde sistem otomatik olarak sonuna null yerleştirmektedir. Bu yüzden kesin olmamakla birlikte null alma ihtimaliniz var.

Saygılarımla
 

okanr

Asistan
Katılım
1 Eylül 2011
Mesajlar
119
Reaksiyon puanı
5
Puanları
18
char main() diye bir fonksiyon yok çünkü de ondan. :) Tavsiyem main kısmını void olarak tanımlamanız, yani "main()" şeklinde. int main() nadir de olsa derleme hatalarına sebep olabilir.
main kısmını
Kod:
main()
olarak tanımlarsanız derleyici onu otomatik
Kod:
int main()
olarak görür.
Kod:
int main()
demek fonksiyonun bitişinide geriye int türünden bir değişken gönderileceği anlamına gelir.Son satıra
Kod:
return 0;
yazmamızın sebebi de main fonksiyonunun başarı ile sonlandırıldığını belirtmek. Yani asıl yazılması gereken
Kod:
int main()
.
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Bazen baktığım kitaplarda falan main(void) tarzı ifadeler görüyorum bunların int main() ile farkı nedir ve neden hata yapabilme imkanı var?Size de çok soru sorduk ama kusura bakmayın:oops::oops::oops:


Merhaba,

main bir fonksiyondur. C'de alt programlara fonksiyon denir. main fonksiyonunun geri dönüş değer olabilir ve bu değer programın çalışması bittikten sonra işletim sistemine iletilmektedir. Bir programın başka programları çalıştırdığı durumlar dışında böyle bir geri dönüş değrine ihtiyaç duyulmaz.
C'de ana programın kendisi bir fonksiyondur ve adı da main'dir.

Aşğıdaki kod çalışır.

Kod:
void main()
{
   printf("Test");
   char c = getchar();
}

Bu aşağıda yazan kodda çalışır.
Kod:
int main(int argc, _TCHAR* argv[])
{
   printf("Test");
   char c = getchar();

   return 0;
}

Aşağıdaki void parametreli main fonksiyonu da çalışır. Siz hiçbirşey belirtmezseniz parametre olarak derleyiciniz otomatik olarak void olarak işaretler.
Kod:
int main(void)
{
.
.

C ile ilgili olarak ek bilgi; main fonksiyonunu bir program içerisinden çağırabilirsiniz. C++'da buna izin verilmez.

Saygılarımla
 

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Aşğıdaki kod çalışır.

[KOD]void main()
{
printf("Test");
char c = getchar();
}[/KOD]
Öncelikle yardımlarınız için çok teşekkürler.Konuyu anlamamı sağladı:):)Ancak yukarıdaki kodu çalıştırmayı denediğimde [Error] '::main' must return 'int' hatasını verdi main() yaptığımda veya main(void) yaptığımda bu hatayı vermedi ancak void main() yaptığımda derleyici hata verdi (Derleyicim Dev-C/C++
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
getchar()=ch yazarsan hata verir tıpkı 8 = değişken yazdığında hata vereceği gibi.
Değişken atamalarında değişken ismi sol tarafa yazılır.
scanf yanlış hatırlamıyorsan tek tuşa bassan bile sonra Enter tuşuna basma zorunluluğu var, getchar'da yok tek bir tuşa basıyorsun.
C yerine C++ öğrenirsen daha yararlı olacağını düşünüyorum, misal C++'da printf ve scanf fonksiyonları çok daha kolaydır, %d %c gibi şeylerle uğraşmazsın.
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Öncelikle yardımlarınız için çok teşekkürler.Konuyu anlamamı sağladı:):)Ancak yukarıdaki kodu çalıştırmayı denediğimde [Error] '::main' must return 'int' hatasını verdi main() yaptığımda veya main(void) yaptığımda bu hatayı vermedi ancak void main() yaptığımda derleyici hata verdi (Derleyicim Dev-C/C++

Merhaba,

derleyicinizin ayarlarıyla ilgili bir sorun olduğunu düşünüyorum. Kodları yazmadan önce Visual Studio 2013 Pro ile kodları test edip öyle yazdım.
İnternet üzerinden ilgili hataya bakabilirsiniz. Ben Dev C/C++ sadece birkaç kez kullandım ve dolayısıyla uzman değilim.

Saygılarımla
 

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Merhaba,

derleyicinizin ayarlarıyla ilgili bir sorun olduğunu düşünüyorum. Kodları yazmadan önce Visual Studio 2013 Pro ile kodları test edip öyle yazdım.
İnternet üzerinden ilgili hataya bakabilirsiniz. Ben Dev C/C++ sadece birkaç kez kullandım ve dolayısıyla uzman değilim.

Saygılarımla
Peki çok çok teşekkürler :):):)
--- Gönderi Güncellendi ---
getchar()=ch yazarsan hata verir tıpkı 8 = değişken yazdığında hata vereceği gibi.
Değişken atamalarında değişken ismi sol tarafa yazılır.
scanf yanlış hatırlamıyorsan tek tuşa bassan bile sonra Enter tuşuna basma zorunluluğu var, getchar'da yok tek bir tuşa basıyorsun.
C yerine C++ öğrenirsen daha yararlı olacağını düşünüyorum, misal C++'da printf ve scanf fonksiyonları çok daha kolaydır, %d %c gibi şeylerle uğraşmazsın.
C öğrendikten sonra diğer dillere geçmek daha mantıklı değil mi hocam? Sonuçta bütün diller C'den türemiş.Yani ben bu mantıkla c diline başladım ama ne kadar doğru bilemem :oops:
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
Çok uzun bir konu bunun için bir başka bir konu açabilirsiniz, C ve C++ geçici kolaydır ama tabi bahsettiğiniz gibi misal Java veya C#'a alışmış kişiler C++ veya C'ye geçmekte zorlanır.
 

Son mesajlar

Üst