Ana içeriğe geç

C++ std::getline() Kullanımı

Bu Rehberde Ne Öğreneceksiniz?​

Bu kılavuzda C++’ta std::getline() fonksiyonunun nasıl çalıştığını öğreneceksiniz.
Klavye veya dosyadan gelen verileri satır satır okuyacak, boşluk içeren girdileri doğru şekilde yakalayacak ve newline hatası gibi sık yapılan hatalardan nasıl kaçınacağınızı keşfedeceksiniz.


Teknik Özet​

  • Ana konu: C++ Standard Kütüphanesi’ndeki std::getline() fonksiyonu
  • Amaç: Giriş akışlarından (cin, ifstream, stringstream) satır veya özel ayraçlara göre veri okumak
  • Avantaj: Boşluk karakterlerini dahil ederek tam satır verisi almak
  • Zorluk: cin >> sonrası kalan \n karakterinin yanlış okunması
  • Çözüm: “dummy getline()” veya cin.ignore() kullanmak

std::getline() Nedir?​

std::getline() fonksiyonu, bir giriş akışından karakterleri okuyup bir std::string değişkenine atar.
Bu, cin >> operatöründen farklı olarak boşlukları da okur.

istream& getline(istream& input_stream, string& output, char delim);

Parametreler:

input_stream: Girdinin kaynağı (std::cin, dosya akışı, string stream)

output: Okunan karakterlerin yazılacağı std::string değişkeni

delim (isteğe bağlı): Okumayı durduran sınırlayıcı (varsayılan \n)

  • Fonksiyon <string> başlık dosyasına aittir çünkü std::string türüyle doğrudan çalışır.

1. Klavyeden Satır Okuma​


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

int main() {
string isim;
cout << "Adınızı girin: ";
getline(cin, isim);
cout << "Merhaba, " << isim << "!\n";
}
  • Açıklama: getline() boşlukları da okuduğu için "Ahmet Yılmaz" gibi veriler sorunsuz alınır.

2. Dosyadan Satır Satır Okuma​

Bir bulut sunucudaki rabisu_veri.txt dosyasını satır satır okuyalım 👇


#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

int main() {
ifstream dosya("rabisu_veri.txt");
vector<string> satirlar;
string temp;

while (getline(dosya, temp)) {
satirlar.push_back(temp);
}

for (const auto& s : satirlar)
cout << s << endl;
}

Örnek Dosya (rabisu_veri.txt):

Merhaba Rabisu Cloud
İkinci satır
Son satır

Çıktı:


Merhaba Rabisu Cloud
İkinci satır
Son satır

3. Özel Sınırlayıcı (Delimiter) Kullanımı​

getline() varsayılan olarak satır sonu \n karakterine kadar okur. Ama istersek bu sınırlayıcıyı değiştirebiliriz.


while (getline(dosya, temp, ' ')) {
satirlar.push_back(temp);
}
  • Açıklama:

Yukarıdaki örnekte ayraç ' ' (boşluk) olduğu için her kelime ayrı ayrı okunur.


4. std::cin Sonrası Boş Satır Hatası​

std::cin >> kullandıktan sonra hemen getline() çağırmak, genellikle boş değer döndürür. Sebebi, cin okuma işleminden sonra akışta kalan \n karakteridir.

Hatalı Örnek:


int id;
string isim;
cin >> id;
getline(cin, isim); // isim boş kalır!

Çözüm 1 – Dummy getline():​


int id;
string isim;
cin >> id;
string dummy;
getline(cin, dummy); // Temizleme
getline(cin, isim);

Çözüm 2 – Profesyonel yöntem (cin.ignore()):​


#include <limits>
cin.ignore(numeric_limits<streamsize>::max(), '\n');
getline(cin, isim);
  • Açıklama:

cin.ignore() akıştaki \n karakterini yoksayar ve gerçek satır girişini okumaya hazır hale getirir.


Performans Özellikleri​

ÖzellikAçıklama
YaklaşımSatır veya özel ayraç bazlı okuma
Zaman KarmaşıklığıO(N)
Kapsamcin, ifstream, stringstream ile uyumlu
AvantajBoşluk dahil satır okuma kolaylığı
Potansiyel Soruncin sonrası kalan newline (\n) karakteri

Sıkça Sorulan Sorular (SSS)​

  1. getline() neden <string> başlığında tanımlıdır?

Çünkü doğrudan std::string nesneleriyle çalışır, bu yüzden <iostream> değil <string> içinde bulunur.

  1. getline() boşlukları neden korur?

Çünkü sınırlayıcıya kadar olan tüm karakterleri “veri” olarak kabul eder.

  1. cin.ignore() ile dummy getline() farkı nedir?

İkisi de aynı işi yapar; ignore() daha kontrollü ve profesyonel bir yöntemdir.

  1. getline() yalnızca dosya akışlarıyla mı çalışır?

Hayır, std::istream’den türeyen tüm akışlarda (cin, ifstream, stringstream) kullanılabilir.

  1. getline() performans açısından güvenilir mi?

Evet, O(N) karmaşıklığıyla büyük dosyaları bile verimli okur.


Sonuç​

Bu rehberde, C++’ta std::getline() fonksiyonunu kullanarak veri okuma işlemlerini hem klavye hem dosya üzerinden öğrendiniz. Ayrıca cin sonrası newline hatasını nasıl çözeceğinizi de gördük.

Rabisu Bulut platformunda C++ geliştirme ortamınızı başlatın ve bu örnekleri hemen deneyin!