2011-05-04 10 views
18

मैं उस इनपुट को संग्रहीत करने की कोशिश कर रहा हूं जो उपयोगकर्ता कंसोल के माध्यम से प्रवेश करता है। इसलिए मुझे "एंटर" और किसी भी सफेद स्थान को शामिल करने की आवश्यकता है।इनपुट की पूरी लाइन पढ़ना

लेकिन cin मुझे पहली जगह के बाद इनपुट देने से रोकता है।

क्या CTRL + Z दबाया जाता है, या कुछ तक पूरी लाइन पढ़ने का कोई तरीका है?

+0

संभावित डुप्लिकेट में getline फ़ंक्शन का उपयोग कर सकते हैं। कृपया http://stackoverflow.com/questions/2765462/how-to-cin-space-in-c – mkaes

+0

पर खोज करते समय मुझे यह पोस्ट नहीं मिला। अगर मैंने किया, तो मैं एक और पोस्ट करूंगा ^^ क्षमा करें, मैं अगली बार – Katia

उत्तर

38

क्या CTRL + Z दबाया गया है या कुछ तक रीडलाइन की तरह कोई तरीका है ??

हाँ, ठीक इस तरह, मुक्त std::getline समारोह (नहीं एक ही नाम के istream विधि!) का उपयोग करते हुए:

string line; 

while (getline(cin, line)) { 
    // do something with the line 
} 

इस पढ़ा जाएगा लाइनों (सफेद स्थान को भी शामिल है, लेकिन न खत्म होने वाली नई पंक्ति के बिना) इनपुट से इनपुट तक पहुंचने तक या cin त्रुटि से संकेत मिलता है।

+0

गहराई से देखने की कोशिश करूंगा ताकि इनपुट 5 लाइन की तरह समाप्त हो, CTRL + Z के साथ समाप्त हो, कोई लाइन नहीं है, तो यह लाइन वैरिएबल पर जायेगी? ? जब मैं पहले के साथ प्रयास कर रहा था, तो स्ट्रिंग वेरिएबल में इनपुट स्पेस के बाद स्टोर नहीं होता .. क्या यह cuz मैं cin का उपयोग नहीं कर रहा था ?? – Katia

+1

@ कतिया केवल 'गेटलाइन' पूरी लाइन पढ़ता है। यदि आप 'cin >> line' के माध्यम से एक स्ट्रिंग इनपुट करते हैं तो यह केवल पहले व्हाइटस्पेस तक पढ़ता है। –

+0

मुझे अब मिल गया है, एक लाख thx :) – Katia

3
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
    string s; 
    while(getline(cin, s)) { 
     // do something with s 
    } 
} 
0

मेरे कार्यक्रम के लिए, मैं कोड की निम्न बिट है कि इनपुट के हर एक चरित्र पढ़ता है जब तक Ctrl + X दबाया जाता है लिखा था। कोड यह रहा:

char a; 
string b; 
while (a != 24) 
{ 
cin.get(a); 
b=b+a; 
} 
cout << b; 

Ctrl + z के लिए, यह दर्ज करें:

char a; 
string b; 
while (a != 26) 
{ 
cin.get(a); 
b=b+a; 
} 
cout << b; 

मैं पुष्टि नहीं कर सकते सीटीआर + z समाधान काम करता है कि, जैसा कि मैंने एक UNIX मशीन पर हूँ, और ctrl + जेड कार्यक्रम को मारता है। यह खिड़कियों के लिए काम कर सकता है या नहीं, हालांकि; आपको अपने लिए देखना होगा।

+0

आप बफर ओवरफ्लो के लिए अपना स्वयं का सेट अप कर रहे हैं, यह सुरक्षित नहीं है – thecoshman

-1
#include <string> 
#include <iostream> 

int main() 
{ 

    std::cout << "enter your name: "; 

    std::string name; 

    std::getline(std::cin, name); 

    return 0; 

} 
+1

स्टैक ओवरफ़्लो में आपका स्वागत है! हालांकि हम आपके उत्तर के लिए धन्यवाद करते हैं, लेकिन यह बेहतर होगा अगर यह अन्य उत्तरों के शीर्ष पर अतिरिक्त मूल्य प्रदान करता है। इस मामले में, आपका उत्तर अतिरिक्त मूल्य प्रदान नहीं करता है, क्योंकि किसी अन्य उपयोगकर्ता ने पहले से ही उस समाधान को पोस्ट किया है। यदि कोई पिछला उत्तर आपके लिए उपयोगी था, तो आपको उसी जानकारी को दोहराने के बजाय इसे वोट देना चाहिए। –

0

आप C++

#include<iostream> 
using namespace std; 
int main() 
{ 
    char msg[100]; 
    cin.getline(msg,100); 
    return 0; 
} 
संबंधित मुद्दे