# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yavuzlar.org/egitim/c-plus-plus/2.0-fonksiyonlar/1.7-kullanici-girdisi-user-input.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
