-2

Если код такой:

void rewrite(string *b) {
        string c;
        getline(cin, c);
        *b = c;
    }
int main()
{
    string b;

    cout << "Please enter a string" << endl;
    getline(cin, b);
    rewrite(&b);
    cout << b;

То программа работает отлично. А если такой:

    void rewrite(string *b) {
                string c;
                getline(cin, c);
                *b = c;
            }
        int main()
        {
            string b;

            cout << "Please enter a string" << endl;
            getline(cin, b);

char userinput; cin >> userinput; if (userinput == 'f') { rewrite(&b); cout << b; }

то программа игнорирует getline из функции rewrite. Сама программа должна перезаписывать строку на новую, которую введет пользователь. Переменная userinput нужна для создания консольного меню. Например, при вводе f в консоль запускалась данная функция ввода новой строки, при вводе другого char другая функция и тд.

  • Что такое userinput? –  Nov 06 '20 at 08:11
  • Вводите Вы в строку b, сравниваете какой-то userinput, причем сравниваете с символом... – Юрий Козлов Nov 06 '20 at 08:13
  • char userinput; cin >> userinput; – Ярослав Мустафин Nov 06 '20 at 08:13
  • где это должно быть? Исправьте код в вопросе. – Юрий Козлов Nov 06 '20 at 08:14
  • Исправил, пожалуйста посмотрите. – Ярослав Мустафин Nov 06 '20 at 08:16
  • После ввода символа в буфере остается символ новой строки, который потом читает getline и думает, что это пустая строка –  Nov 06 '20 at 08:17
  • Кроме того, у Вас в приведенном коде какие-то сложности с фигурными скобками. проверьте, это ошибка в коде, или просто сюда не все скопировалось? – Юрий Козлов Nov 06 '20 at 08:18
  • вашу ошибку получить не получается. Укажите операционку и компилятор. – AlexGlebe Nov 06 '20 at 08:35
  • За что ж Вы нас так не любите?.. Поправьте отступы в коде, будьте человечны. – V-Mor Nov 06 '20 at 08:53
  • в инструкции http://www.cplusplus.com/reference/string/string/getline/ говориться, что символ новой строки удаляется. If the delimiter is found, it is extracted and discarded (i.e. it is not stored and the next input operation will begin after it). Вы что-то умалчиваете. – AlexGlebe Nov 06 '20 at 08:58

1 Answers1

-1
char userinput;
    cin >> userinput;
    cin.ignore();

Помогло добавление cin.ignore(); после cin >> как сказал пользователь EOF