Не получается считать строку из консоли

301
26 ноября 2016, 19:01

Нужно считать строку из консоли в массив char.

Проблема в том что scanf и cin читают строку только до первого пробела, а мне нужно записать в массив строку целиком.

Как мне решить эту проблему?

Answer 1

Используйте функцию-член класса входного потока 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() );
READ ALSO
Ошибка сборки: Cannot find -lGL

Ошибка сборки: Cannot find -lGL

При попытке сборки проекта Qt Widgets выдает вот такую ошибку:

236
Как перевести вектор в углы эйлера? c++

Как перевести вектор в углы эйлера? c++

Пытаюсь восстановить код функции:

334
Тип HANDLE. Как значение дескриптора записать в строку?

Тип HANDLE. Как значение дескриптора записать в строку?

Создаю дескриптор текстового файла HANDLE file = CreateFile(

381