Anladığım gibi, ekstraksiyon operatörü başlangıçtaki boşlukları atlar ve bir boşluk veya akış sonuyla karşılaşıldığında durur. noskipws, önde gelen beyaz alanları göz ardı etmek için kullanılabilir.noskipws'ın cin üzerindeki etkisi >>
Noskipws'ı kullandığım aşağıdaki program var.
#include <iostream>
using namespace std;
int main()
{
char name[128];
cout<<"Enter a name ";
cin>>noskipws>>name;
cout<<"You entered "<<name<<"\n";
cout<<"Enter another name ";
cin>>name;
cout<<"You entered "<<(int)name[0]<<"\n";
return 0;
}
Benim sorgusu:
Ben ilk giriş olarak "John" girerseniz, o zaman ikinci cin >> operasyon girişi için beklemez ve hedef yani bir şey kopyalamaz ad dizisi. Hedef dizgiyi boş olarak ayarlamak yerine, ikinci sinemayı >> en az bir satır sonu veya akış sonuna aktarmayı bekledim. Bu neden oluyor ?
"John Smith" e ilk cin >> ifadesi için girdi olarak girdiğimde de aynı şey gözlemlenir. İkinci cinayet >> ifadesi neden uzay veya "Smith" kelimesini hedef değişkene kopyalamıyor?
takiben Programın çıktısı:
Enter a name John
You entered John
Enter another name You entered 0
Enter a name John Smith
You entered John
Enter another name You entered 0
Teşekkür !!!
. Üretim kodunda, bir char dizisine yazmak için 'std :: cin' kullanmamalısınız. Bunun yerine bir 'std :: string' kullanın. – smerlin
Bu doğru. Yukarıdaki kod sadece örnekleme amaçlıydı. Cin.width veya cin.getline kullanımı, taşma sorunlarının bazılarını önleyebilir, ancak std :: string'den de bahsettiğiniz gibi en iyisi olacaktır. Yukarıdaki örnek kodu sadece ne sormaya çalıştığımı göstermek için verdim. –