std::cin input with spaces?

前端 未结 8 1143
再見小時候
再見小時候 2020-11-21 05:41
#include 

std::string input;
std::cin >> input;

The user wants to enter \"Hello World\". But cin fails at the spa

相关标签:
8条回答
  • 2020-11-21 06:09

    The Standard Library provides an input function called ws, which consumes whitespace from an input stream. You can use it like this:

    std::string s;
    std::getline(std::cin >> std::ws, s);
    
    0 讨论(0)
  • 2020-11-21 06:22

    THE C WAY

    You can use gets function found in cstdio(stdio.h in c):

    #include<cstdio>
    int main(){
    
    char name[256];
    gets(name); // for input
    puts(name);// for printing 
    }
    

    THE C++ WAY

    gets is removed in c++11.

    [Recommended]:You can use getline(cin,name) which is in string.h or cin.getline(name,256) which is in iostream itself.

    #include<iostream>
    #include<string>
    using namespace std;
    int main(){
    
    char name1[256];
    string name2;
    cin.getline(name1,256); // for input
    getline(cin,name2); // for input
    cout<<name1<<"\n"<<name2;// for printing
    }
    
    0 讨论(0)
  • 2020-11-21 06:22

    How do I read a string from input?

    You can read a single, whitespace terminated word with std::cin like this:

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main()
    {
        cout << "Please enter a word:\n";
    
        string s;
        cin>>s;
    
        cout << "You entered " << s << '\n';
    }
    

    Note that there is no explicit memory management and no fixed-sized buffer that you could possibly overflow. If you really need a whole line (and not just a single word) you can do this:

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main()
    {
        cout << "Please enter a line:\n";
    
        string s;
        getline(cin,s);
    
        cout << "You entered " << s << '\n';
    }
    
    0 讨论(0)
  • 2020-11-21 06:23

    Use :

    getline(cin, input);
    

    the function can be found in

    #include <string>
    
    0 讨论(0)
  • 2020-11-21 06:24

    It doesn't "fail"; it just stops reading. It sees a lexical token as a "string".

    Use std::getline:

    int main()
    {
       std::string name, title;
    
       std::cout << "Enter your name: ";
       std::getline(std::cin, name);
    
       std::cout << "Enter your favourite movie: ";
       std::getline(std::cin, title);
    
       std::cout << name << "'s favourite movie is " << title;
    }
    

    Note that this is not the same as std::istream::getline, which works with C-style char buffers rather than std::strings.

    Update

    Your edited question bears little resemblance to the original.

    You were trying to getline into an int, not a string or character buffer. The formatting operations of streams only work with operator<< and operator>>. Either use one of them (and tweak accordingly for multi-word input), or use getline and lexically convert to int after-the-fact.

    0 讨论(0)
  • 2020-11-21 06:26

    I rather use the following method to get the input:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(void) {
        string name;
    
        cout << "Hello, Input your name please: ";
        getline(cin, name);
    
        return 0;
    }
    

    It's actually super easy to use rather than defining the total length of array for a string which contains a space character.

    0 讨论(0)
提交回复
热议问题