строка — эквивалент Console.ReadLine () в переполнении стека

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

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

поэтому на рисунке показан код, который в настоящий момент выполняется в фоновом режиме, и он должен был остановиться на «Нет уверенности в себе»: и ждал ввода, но он его пропустил.

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

13

Решение

Ты ищешь std::getline(), Например:

std::string str;
std::getline(std::cin, str);

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

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

25

Другие решения

В соответствии с MSDN, Консоль :: ReadLine:

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

Вариант C ++ (без указателей):

#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-вариант (с буферами и указателями), также
работает с компиляторами C ++, но не должен использоваться:

 #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);
}

Согласно вашему примеру кода, если у вас есть структура patient (исправлено после замечания Дэвида Хеффермана):

struct patient {
std::string nam, nom, prenom, adresse;
};

Затем должно работать следующее (добавлено ios::ignore после дополнительной проблемы решено Дэвидом Хеффернаном логическим мышлением). пожалуйста НЕ ДЕЛАЙТЕ использование 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);
...
7

По вопросам рекламы [email protected]