- Konu sahibi
- #1
Klavyeden girilen metni C++’ta okumak için tek kelimelik girişlerde
Kullanıcı
Bir cümlenin veya satırın tamamını almak için
Kullanıcı
Seçim, boşlukların metnin parçası olup olmadığına bağlıdır.
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
Aşağıdaki örnekte önce yaş, ardından boşluk içerebilen ad-soyad bilgisi okunur:
Program örneğin
Metin değişkene aktarıldıktan sonra normal bir
Kullanıcı
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.
| Gereksinim | Kullanılacak yöntem | Sonuç |
|---|---|---|
| Tek kelime veya boşluksuz değer | std::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 |
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.