जैसा कि मैं समझता हूं, निष्कर्षण ऑपरेटर शुरुआत में व्हाइटस्पेस छोड़ देता है और एक सफेद जगह या स्ट्रीम के अंत का सामना करने पर रोक देता है। प्रमुख सफेद जगहों को अनदेखा करना बंद करने के लिए noskipws का उपयोग किया जा सकता है।cin पर noskipws का प्रभाव >>
मेरे पास निम्न प्रोग्राम है जहां मैंने noskipws का उपयोग किया है।
#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;
}
मेरे प्रश्नों हैं:
अगर मैं पहले इनपुट के रूप में "जॉन" दर्ज करते हैं, तो दूसरी CIN >> आपरेशन इनपुट के लिए प्रतीक्षा नहीं करता है और गंतव्य यानी के लिए कुछ भी नकल नहीं करता है नाम सरणी मुझे दूसरी सीन >> कम से कम एक नई लाइन या स्ट्रीम के अंत में स्थानांतरित करने की अपेक्षा की जाती है, बस गंतव्य स्ट्रिंग को खाली करने के बजाय। ये क्यों हो रहा है ?
वही बात देखी जाती है जब मैं "जॉन स्मिथ" को पहली सीन >> कथन के इनपुट के रूप में दर्ज करता हूं। दूसरी सीन >> कथन क्यों अंतरिक्ष या "स्मिथ" गंतव्य चर के लिए कॉपी नहीं करता है?
के बाद कार्यक्रम का उत्पादन होता है:
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
धन्यवाद !!!
मुझे आशा है कि आप जानते हैं कि आप इस कार्यक्रम का उत्पादन कर सकते है कि बफर बहुत आसानी से overflows (एक बार इस मामले में जहां यह मतलब हो सकता है जब एक
char
को>>
का उपयोग कर रहा है। इस मामले में, धारा हमेशा अर्क एक चरित्र।)। उत्पादन कोड में, आपको char array में लिखने के लिए 'std :: cin' का उपयोग नहीं करना चाहिए। इसके बजाए 'std :: string' का प्रयोग करें। – smerlinसच है। उपर्युक्त कोड केवल चित्रण उद्देश्यों के लिए था। Cin.width या cin.getline का उपयोग कुछ अतिप्रवाह मुद्दों से बच सकते हैं, लेकिन जैसा कि आपने बताया है कि std :: string सबसे अच्छा होगा। मैंने उपर्युक्त उदाहरण कोड दिया ताकि मैं यह दिखाने के लिए कि मैं क्या पूछने की कोशिश कर रहा था। –