> For the complete documentation index, see [llms.txt](https://docs.yavuzlar.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.yavuzlar.org/egitim/c-plus-plus/2.0-fonksiyonlar/1.7-kullanici-girdisi-user-input.md).

# 1.7 Kullanıcı Girdisi (User Input)

C++ dilinde kullanıcıdan giriş (input) almak için standart giriş akışı olan `cin` nesnesi kullanılır. `cin` (console input) nesnesi, `iostream` başlık dosyasında tanımlanmıştır ve klavyeden alınan veriyi programınıza aktarmak için kullanılır. `cin`nesnesi, `>>` (çıkarma operatörü) ile birlikte kullanılarak, kullanıcıdan alınan veriyi bir değişkene aktarır.

## Temel Kullanım

Kullanıcıdan alınan girişler genellikle `int`, `float`, `double`, `char` ve `string` gibi temel veri türleriyle ilişkilidir.

```
#include <iostream>  // Giriş ve çıkış işlemleri için gerekli başlık dosyası
using namespace std;

int main() {
    int number;
    cout << "Bir sayi girin: ";  // Kullanıcıya bilgi mesajı gösterme
    cin >> number;               // Kullanıcıdan sayı girişini alma
    cout << "Girdiginiz sayi: " << number << endl;  // Girilen sayıyı ekrana yazdırma
    return 0;
}
```

> **`using namespace std;`**: `std` isim alanı (`namespace`) kullanımını kolaylaştırır, böylece `std::cin` ve `std::cout`yerine doğrudan `cin` ve `cout` kullanılabilir.

**Açıklama:**

1. **`#include <iostream>`**: `cin` ve `cout` gibi giriş/çıkış işlemlerini içeren `iostream` başlık dosyasını programa ekler.
2. **`cout << "Bir sayi girin: "`**: Ekrana bilgi mesajı yazar.
3. **`cin >> number;`**: Kullanıcının girdiği değeri `number` değişkenine atar.
4. **`cout << "Girdiginiz sayi: " << number << endl;`**: Kullanıcının girdiği değeri ekrana yazdırır.

## Çeşitli Veri Türleri İçin Kullanıcı Girdisi

Kullanıcıdan birden fazla veri türünde giriş almak da mümkündür. Örneğin, `string`, `double` veya `char` gibi farklı veri türlerini `cin` ile okuyabilirsiniz.

```
#include <iostream>
#include <string>  // string veri türünü kullanmak için gerekli başlık dosyası
using namespace std;

int main() {
    string name;
    int age;
    double height;

    cout << "Adinizi girin: ";
    cin >> name;  // string türünde giriş

    cout << "Yasinizi girin: ";
    cin >> age;   // int türünde giriş

    cout << "Boyunuzu girin (metre cinsinden): ";
    cin >> height;  // double türünde giriş

    cout << "\nMerhaba, " << name << "! " 
         << "Yasiniz: " << age 
         << ", Boyunuz: " << height << " metredir." << endl;

    return 0;
}
```

## `getline` Kullanımı (Satır Bazlı Kullanıcı Girdisi)

`cin` operatörü, boşluk karakteri ( ) veya satır sonu karakteri () gördüğünde okumayı durdurur. Bu nedenle, kullanıcı tam bir satır girmek isterse `getline()` fonksiyonu kullanılabilir. `getline()` fonksiyonu, `cin` operatörü ile kıyaslandığında, tüm satırı (boşluk dahil) okur ve bir `string` değişkenine atar.

```
#include <iostream>
#include <string>  // string veri türü için gerekli başlık dosyası
using namespace std;

int main() {
    string fullName;
    
    cout << "Tam isminizi girin: ";
    getline(cin, fullName);  // Kullanıcıdan tüm satırı alır (boşluklar dahil)
    
    cout << "Girdiginiz isim: " << fullName << endl;
    return 0;
}
```

**Açıklama:**

* `getline(cin, fullName);` ifadesi, `cin` nesnesinden tam satırı okuyarak `fullName` değişkenine atar. Böylece, kullanıcının girdiği isim boşluk içeriyor olsa bile tüm satır okunur ve değişkene atanır.

## Birden Fazla Kullanıcı Girdisi Alma

Kullanıcıdan aynı anda birden fazla girdi almak için `cin`'i ardışık olarak kullanabilirsiniz:

```
#include <iostream>
using namespace std;

int main() {
    int x, y;
    
    cout << "Iki sayi girin: ";
    cin >> x >> y;  // Kullanıcıdan aynı anda iki girdi alır

    cout << "Girdiginiz sayilar: " << x << " ve " << y << endl;
    return 0;
}
```

**Açıklama:**

Bu örnekte `cin >> x >> y;` ifadesi, kullanıcıdan arka arkaya iki giriş (sayı) alır ve `x` ve `y` değişkenlerine atar.

#### Kullanıcı Girdisi Alırken Dikkat Edilmesi Gereken Noktalar

1. **Geçersiz Girdi**: Kullanıcı beklenen veri türünde bir girdi girmezse (`int` yerine `string` gibi), `cin` hata durumuna geçer ve daha fazla veri okumaz. Bu durumu düzeltmek için `cin.clear()` ve `cin.ignore()` kullanılabilir.

```
cin.clear();  // Hata bayrağını temizler
cin.ignore(1000, '\n');  // Girdi akışındaki karakterleri yok sayar
```

2. **Boşlukları Okuma**: `cin` yalnızca ilk boşluğa kadar olan veriyi okur. Tam bir satırı almak için `getline()` kullanmak gereklidir.
3. **Kullanıcıdan Gelen Fazla Girdi**: Kullanıcı beklenenden fazla giriş yaparsa, `cin` fazladan gelen verileri okumaz ve bu veriler giriş akışında kalır. Bu durumda, sonraki `cin` işlemlerinde beklenmedik davranışlar görülebilir. Bu durum `cin.ignore()` ile çözülebilir.
