Нужно считать строку из консоли в массив 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() );
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Создаю дескриптор текстового файла HANDLE file = CreateFile(
у меня так получилось