Getline ignoring first character of input

前端 未结 3 1130
遥遥无期
遥遥无期 2020-12-11 04:20

I\'m just starting with arrays in C++ and I\'m having a problem getting the first character of an array.

This is my code,

1- I enter a name, such as \"Jim\"<

相关标签:
3条回答
  • 2020-12-11 04:47

    Just remove cin.ignore();

    This ignores the first character, thus you miss the 'J'.

    0 讨论(0)
  • 2020-12-11 05:04

    Here is signature of cin.ignore:

    istream& ignore (streamsize n = 1, int delim = EOF);
    

    So if you call ignore function without any parameters, it will ignore '1' char by default from input. In this case it ignored 'J'. Remove ignore call and you will get 'Jim'.

    0 讨论(0)
  • 2020-12-11 05:04

    I had this piece of code with the problem that it was eating the first character after the first cycle (first cycle was ok)

    do{
        cout << endl << "command:> ";
        string cmdStr1="";
        cin.ignore();
        getline(cin, cmdStr1);
        cout << "cin= " << cmdStr1 << endl; //For Debuging
        //...more code here
    }while(1);
    

    Output was:

    command:> pos

    cin= pos

    command:> pos ... from 2nd loop it started to delete the 1st character

    cin= os

    ...

    If "cin.ignore();" was commented then it resulted in a "segmentation fault":

    command:> cin=

    Segmentation fault

    Solution working for me:

    To move the "cin.ignore();" line just before the do-while loop.

    cin.ignore();
    
          do{
                std::cout << endl << "command:> ";
                std::string cmdStr1="";
                std::getline(std::cin, cmdStr1);
                std::cout << "cin= " << cmdStr1 << endl; //For Debuging
                //...more code here
        }while(1);
    

    Output was:

    command:> pos

    cin= pos

    command:> pos

    cin= pos

    ...

    ...

    P.S. It was incredible hard to put code here... I am disappointment to continue collaborating.

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