Эквивалент Console.ReadLine() в С++

screenshot Мой учитель просто дал мне задание в С++, и я пытаюсь получить строку с помощью scanf, но только для ввода последних символов. Кто-нибудь может мне помочь? Я ищу эквивалент console.readline() в С++.

edit: я также должен иметь возможность сохранять значение через указатель.

чтобы на картинке отображался код, текущий в фоновом режиме, и он должен был останавливаться при отсутствии уверенности в maladie: и ждал ввода, но он пропустил его.

getline (cin, ptrav- > nam); работает, но по какой-то причине пропускает строку...

Ответ 1

Вы ищете std::getline(). Например:

#include <string>
std::string str;
std::getline(std::cin, str);

Я понятия не имею, что вы имеете в виду, когда говорите, что я также должен сохранять значение через указатель.

Обновление: Глядя на ваш обновленный вопрос, я могу представить, что происходит. Код, который читает выбор, то есть число 1, 2 и т.д., Не читает новую строку. Затем вы вызываете getline который потребляет символ новой строки. И затем вы снова вызываете getline который выбирает строку.

Ответ 2

Согласно MSDN, Console:: ReadLine:

Reads the next line of characters from the standard input stream.

С++ - Variant (без указателей):

#include <iostream>
#include <string>

 int main()
{
 std::cout << "Enter string:" << flush;
 std::string s;
 std::getline(std::cin, s);
 std::cout << "the string was: " << s << std::endl;
}


C-Variant (с буферами и указателями), также работает с компиляторами С++, но не следует использовать:
 #include <stdio.h>
 #define BUFLEN 256

 int main()
{
 char buffer[BUFLEN];   /* the string is stored through pointer to this buffer */
 printf("Enter string:");
 fflush(stdout);
 fgets(buffer, BUFLEN, stdin); /* buffer is sent as a pointer to fgets */
 printf( "the string was: %s", buffer);
}


Согласно вашему примеру кода, если у вас есть struct patient (исправлено после замечания Дэвида Хеффермана):
struct patient {
   std::string nam, nom, prenom, adresse;
};

Затем должно работать следующее (добавлено ios::ignore после того, как дополнительная проблема была решена DavidHeffernan логическим мышлением). Пожалуйста, НЕ используйте scanf в коде ВСЕ ВСЕ.

...
std::cin.ignore(256); // clear the input buffer

patient *ptrav = new patient;

std::cout << "No assurance maladie : " << std::flush;
std::getline(std::cin, ptrav->nam);
std::cout << "Nom : " << std::flush;
std::getline(std::cin, ptrav->nom);
std::cout << "Prenom : " << std::flush;
std::getline(std::cin, ptrav->prenom);
std::cout << "Adresse : " << std::flush;
std::getline(std::cin, ptrav->adresse);
...