Mehmet

WFN Üye
Konular
1,095
Mesajlar
1,096
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Klavyeden girilen metni C++’ta okumak için tek kelimelik girişlerde std::cin >> metin, boşluk içeren bir satırın tamamında ise std::getline(std::cin, metin) kullanılır. Örneğin kullanıcının Ali Veli gibi boşluk içeren bir metin girmesi bekleniyorsa getline tercih edilmelidir. Program çalıştığında kullanıcı metni yazıp Enter tuşuna basar; okunan değer değişkene aktarılır ve sonraki işlem bu değişken üzerinden yapılır.

Tek kelimelik metni okuma​


std::cin akışından >> operatörüyle okuma, ilk boşluk karakterinde durur. Boşluk karakterleri arasında kalan bölüm tek bir metin olarak alınır.

C++:
#include <iostream>
#include <string>

int main() {
    std::string ad;

    std::cout << "Adınızı girin: ";
    std::cin >> ad;

    std::cout << "Girilen ad: " << ad << '\n';
    return 0;
}

Kullanıcı Mehmet yazıp Enter tuşuna basarsa ad değişkeninin değeri Mehmet olur. Kullanıcı Mehmet Ali girerse yalnızca Mehmet okunur; Ali giriş akışında kalır. Bu yöntem kullanıcı adı, şehir kodu veya boşluk içermeyen kısa değerler için uygundur.

Boşluk içeren metnin tamamını okuma​


Bir cümlenin veya satırın tamamını almak için std::getline kullanılır. Bu işlev, Enter tuşuna basılana kadar yazılan karakterleri okur ve boşlukları korur.

C++:
#include <iostream>
#include <string>

int main() {
    std::string metin;

    std::cout << "Bir metin girin: ";
    std::getline(std::cin, metin);

    std::cout << "Girilen metin: " << metin << '\n';
    return 0;
}

Kullanıcı C++ öğreniyorum yazarsa metin değişkeni aynı satırı, yani C++ öğreniyorum değerini alır. getline boşlukları okuyabildiği için cümle, dosya adı veya kullanıcı tarafından yazılan açıklama gibi değerlerde doğru seçimdir. Ancak satır sonunu değil, satır sonuna kadar olan metni alır; Enter karakteri değişkende tutulmaz.

Hangi yöntemi kullanmalısınız?​


Seçim, boşlukların metnin parçası olup olmadığına bağlıdır.
GereksinimKullanılacak yöntemSonuç
Tek kelime veya boşluksuz değerstd::cin >> metinİlk boşluğa kadar okur
Boşluk içeren metnin tamamıstd::getline(std::cin, metin)Enter tuşuna kadar olan satırı okur
Bu iki yöntemi aynı programda kullanırken giriş akışında kalan satır sonuna dikkat etmek gerekir. Özellikle önce sayısal bir değer std::cin >> ile okunup hemen ardından std::getline çağrılırsa, getline çoğu zaman boş bir satır okuyabilir. Bunun nedeni, sayıdan sonra basılan Enter karakterinin akışta kalmasıdır.

Sayıdan sonra metin okumak​


Aşağıdaki örnekte önce yaş, ardından boşluk içerebilen ad-soyad bilgisi okunur:

C++:
#include <iostream>
#include <string>
#include <limits>

int main() {
    int yas;
    std::string adSoyad;

    std::cout << "Yaşınızı girin: ";
    std::cin >> yas;

    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    std::cout << "Adınızı ve soyadınızı girin: ";
    std::getline(std::cin, adSoyad);

    std::cout << "Yaş: " << yas << '\n';
    std::cout << "Ad soyad: " << adSoyad << '\n';
    return 0;
}

ignore çağrısı, sayıdan sonra akışta kalan karakterleri Enter satır sonuna kadar temizler. Böylece getline bir önceki girişin kalan satırını değil, kullanıcının yeni yazdığı metni okur.

Program örneğin 25 ve ardından Ayşe Yılmaz girdilerini alırsa ekranda bu iki değer ayrı ayrı gösterilir. Yaş yerine harf girilirse sorun yalnızca metin okuma yöntemiyle ilgili değildir; std::cin hata durumuna geçer. Böyle bir durumda hatayı temizlemek ve geçersiz girdiyi yeniden istemek gerekir. Basit örneklerde doğru veri girildiği varsayılabilir; gerçek uygulamalarda sayısal girişin başarılı olup olmadığı ayrıca kontrol edilmelidir.

Okunan metni kullanma​


Metin değişkene aktarıldıktan sonra normal bir std::string gibi kullanılabilir. Örneğin karakter sayısını öğrenmek için size() çağrılabilir:

C++:
#include <iostream>
#include <string>

int main() {
    std::string metin;

    std::cout << "Metin girin: ";
    std::getline(std::cin, metin);

    std::cout << "Karakter sayısı: " << metin.size() << '\n';
    return 0;
}

Kullanıcı Merhaba dünya girerse değişkende boşluk da bulunduğu için uzunluk hesabına satırdaki boşluk karakteri de dâhil edilir. Bu sonuç, metnin ekranda kaç kelime içerdiğini değil, std::string içinde kaç karakter bulunduğunu ifade eder. Kelime sayısı veya baştaki-sondaki boşlukların temizlenmesi gibi farklı bir işlem gerekiyorsa metin okunduktan sonra ayrıca uygulanmalıdır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic