2011-04-13 26 views
5

İlkNeden std :: noskipws çalışmıyor, ya da ne yapması gerekiyor? Benim anlayış kapalı

cin >> std::noskipws >> str; 

str içine "i boşluklar olan" gibi cin bir bütün çizgi sopa gerektiğidir. Bununla birlikte, bu sadece "i" yi str içine koyar. Bu yanlış bir varsayım olabilir, bu durumda std::noskipws ne yapar?

std::getline numaralı bir işlevin olduğunu biliyorum ve bu işe yaramıyor, ancak eğitim amaçlı olarak, benim için çalışmak için std::noskipws almayı denemeye karar verdim. Geçmişte denedim ve hiçbir zaman işe yaramıyor, dolayısıyla normalde std::getline'u kullanıyorum. Ben şimdiye kadar bulduk düşünüyorum ne

std::noskipws teknik sadece içten basic_iostream sadece yüzden kendi akışı formunu basic_iostream devralan çalıştı

ios_base::unsetf(std::ios::skipws); 

veya

ios_base::unsetf(ios_base::skipws); 

çağıran std::skipws getopts olmasıdır ve bu bayrakları el ile ayarlama (bunları). Hala zar yok.

Yani, tamamen tabanda mıyım yoksa bu işi yapmanın bir yolu var mı?

+0

İyi soru; SO :) –

+0

'a hoş geldiniz Belki de [sınırlayıcıyı değiştir] (http://stackoverflow.com/a/7304184/3484570) 'ı kullanmak istersiniz, ama bundan şüphe duyuyorum. – nwp

cevap

10

std :: noskipws, bir tür okumayı denerken önalana herhangi bir beyaz boşluk atlamamalarını söyler. Önde gelen beyaz boşluk olmadığında, bayrağın etkisi olmaz.

+0

ahh, yeterince adil, onu boşlukların sınırlayıcı olmadığını söylemek için bayrak yok mu? –

+0

Bütün bir giriş satırını okumak istiyorsanız, 'getline' kullanın. –

+0

@Digital: “std :: ctype” biçimlendirme fasetini kullanarak istediğiniz alanı yeniden tanımlayabilirsiniz. Eğer fasetlere girmeye istekli iseniz. – Potatoswatter

2

std::skipws aşağıdaki gibi çalışır: std::istream daima güncel bir okuma pozisyonunu korur. std::skipws ayarlanmışsa, operator>>'dan önce geçerli okuma konumu, boşluk olmayan ilk karaktere ilerletilir.

görüyorsanız davranış ('i' sonraki ilk boşlukta dur) std::string için operator>> (ve std::wstring) kaynaklanır. Bu operatör std::istream bayraklarını hesaba katmaz. Başka bir tür için operator<< aksi karar verebilir ve boşluklarda bile devam edebilir.