Нужно считать строку из консоли в массив char.
Проблема в том что scanf и cin читают строку только до первого пробела, а мне нужно записать в массив строку целиком.
Как мне решить эту проблему?
Используйте функцию-член класса входного потока getline.
Вот их объявления
basic_istream<charT,traits>& getline(char_type* s, streamsize n);
basic_istream<charT,traits>& getline(char_type* s, streamsize n,
char_type delim);
Либо можете использовать функцию-член класса входного потока get. Ее объявление выглядит похожим на предыдущую функцию.
basic_istream<charT,traits>& get(char_type* s, streamsize n);
basic_istream<charT,traits>& get(char_type* s, streamsize n,
char_type delim);
Различие между этими функциями состоит в том, что первая функция считывает чимвол delim (если он не указан, то символ новой строки) из входного потока, но не заносит его в строку. В то время как вторая функция оставляет этот символ во входном потоке.
Думаю что вам лучше использовать первую функцию.
Вот пример работы с функцией getline
#include <iostream>
int main()
{
const size_t N = 50;
char s[N];
std::cout << "Enter a sentence: ";
std::cin.getline( s, N );
std::cout << '\n' << s << std::endl;
return 0;
}
Диалог работы с этой функцией может выглядеть, например, следующим образом:
Enter a sentence: Hello World!
Hello World!
Если вы перед вызовом этой функции осуществляли ввод с помощью оператора operator >>, то в буфере ввода может остаться символ новой строки. Его можно удалить вызовом другой функции-члена класса ignore Простейший вызов этой функции выглядит как
std::cin.ignore();
Либо чтобы гарантированно убрать символ новой строки, то
#include <limits>
//...
std::cin.ignore( std::numeric_limits<streamsize>::max() );
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости